abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:33 | Nová verze

    Google Chrome 155 byl prohlášen za stabilní. Přináší podporu JPEG XL (.jxl). Opraveno bylo 247 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    dnes 16:00 | Komunita

    Konference OpenAlt 2026 hledá přednášející. Přihlásit přednášky lze do neděle 11. října. Konference proběhne o víkendu 7. a 8. listopadu na půdě Fakulty informačních technologií VUT v Brně. Témata konference jsou: Otevřený a svobodný software, IoT a Hnutí tvůrců, Vzdělávání, Bezpečnost a soukromí, Otevřená společnost, komunity a data, OpenMobility a další.

    Ladislav Hagara | Komentářů: 0
    dnes 13:22 | Nová verze

    Byla vydána nová verze 10.6 sady aplikací pro SSH komunikaci OpenSSH. Přináší řadu důležitých bezpečnostních oprav, vylepšení funkcí a oprav chyb. Povoluje hybridní postkvantový podpisový algoritmus ssh-mldsa44-ed25519.

    Ladislav Hagara | Komentářů: 0
    dnes 04:00 | Zajímavý software

    Americká společnost Reflection AI světu představila Beam, open-weight model s 501 miliardami parametrů (z toho 23 miliard aktivních), určený především pro programování a práci autonomních agentů. Podle autorů jejich model nabízí výkon srovnatelný s většími modely při výrazně nižších nárocích na výpočetní výkon. Beam nyní ještě prochází závěrečným testováním, na stránkách Reflection AI se však lze zaregistrovat a získat předběžný přístup. Váhy modelu, dokumentace a nástroje pro vývojáře mají být zveřejněny v průběhu tohoto měsíce.

    AfD 💙 | Komentářů: 0
    dnes 02:00 | Komunita

    OpenCourant je komunitní fork OpenRadioss, tj. open source softwaru pro simulace havárií, nárazů a vysoce nelineárních dynamických dějů metodou konečných prvků. Společnost Siemens v loňském roce dokončila akvizici společnosti Altair Engineering, jež před čtyřmi lety uvolnila open source verzi OpenRadioss svého proprietárního softwaru Radioss. Minulý týden Siemens OpenRadioss pohřbil. Integroval jej do svého softwaru Simcenter, webovou stránku OpenRadioss přesměroval na Simcenter a repozitář OpenRadioss na GitHubu odstranil.

    Ladislav Hagara | Komentářů: 0
    dnes 00:22 | Pozvánky

    Pořadatelé devátého ročníku komunitního setkání správců nejen českých a slovenských sítí – CSNOG 2027, které se uskuteční 20. a 21. ledna, vyhlásili Call for Abstracts. Náměty na vystoupení mohou zájemci přihlašovat do 31. října na webu akce a vybírat mohou ze tří sekcí – správa sítí, legislativa a regulace a akademické projekty. Zveřejněny byly také Call of Partners určené sponzorům a partnerům setkání, kteří by například chtěli mít na

    … více »
    VSladek | Komentářů: 0
    včera 16:11 | Zajímavý software

    Strata je open-source inferenční engine, který umožňuje lokálně provozovat rozsáhlý čínský model Qwen3.8-Flash-Next, který by jinak nejspíše vyžadoval serverovou infrastrukturu, na běžném herním počítači s alespoň 12 GB VRAM, 32 GB RAM a dostatkem místa na SSD. Nároky na paměť a rychlost generování se liší s použitou variantou modelu Qwen. Zdrojový kód je dostupný na GitHubu, pod licencí MIT.

    AfD 💙 | Komentářů: 2
    včera 15:11 | Humor

    Americký prezident Donald Trump oznámil vznik federální Jednotky pro superinteligenci (Super Intelligence Force), která má koordinovat postup vlády, technologických firem, náboženských organizací a dalších institucí v oblasti rychle se rozvíjející umělé inteligence (Trumpem oficiálně nazývanou superinteligencí). SIF, podřízená přímo Trumpovi, má pomoci Spojeným státům udržet v oblasti SI technologický náskok nad světem a

    … více »
    AfD 💙 | Komentářů: 4
    včera 13:11 | Zajímavý software

    Klient je e-mailový klient pro GNOME s nativní podporou Proton Mailu, PGP a spamfiltrem řízeným AI. Napsaný je v Go s GTK4 a libadwaita. Připojuje se přímo k Proton Mailu (bez Proton Bridge), ke Gmailu, k Seznam.cz a k libovolné schránce IMAP/SMTP. Každou novou zprávu nejdřív posoudí spamfiltr a teprve potom ji ukáže a ohlásí. Rozhraní je česky a anglicky.

    Ladislav Hagara | Komentářů: 5
    včera 10:44 | Humor

    Hra Doom nově běží také v SQL databázi CedarDB. Představen byl SQLDoom. Vyzkoušet lze online demo. Zdrojové kódy jsou k dispozici na GitHubu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2812 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Null byte injection v preg_replace a nebezpečný nginx

    10.5.2014 17:00 | Přečteno: 3848× | Web | Výběrový blog | poslední úprava: 10.5.2014 17:43

    Nedávno som bol nútený kvôli hacknutu niekoľkých PHP webov robiť bezpečnostný audit. Narazil som pri tom na niekoľko zaujímavých spôsobov útoku na web. V dnešnom blogu sa pozrieme na 2, ktoré ma zaujali asi najviac.

     Null byte injection v preg_replace

    Volanie funkcií preg_replace vyzerá v zdrojových kódoch pomerne nenápadne a neškodne. Veď čo sa môže stať keď je v projekte nalsledujúci kód?

    preg_replace('/'.$_GET['replace'].'/i', $_GET['with'], $str);

    Toto nevynne vyzerajúce volanie preg_replace umožňuje útočníkovi vykonať ľubovoľný PHP kód a to vďaka niekoľkým nebezpečným vlastnostiam PHP.

    Prvým problémom je, že PHP väčšinou obaľuje C funkcie. C-čkári určite vedia, čo znamená null terminated string. Vložením znaku '\0' do regulárneho výrazu je možné ho kdekoľvek ukončiť.

    Druhým problémom je to, že flagy regulárneho výrazu sa zapisujú priamo do zdrojového kódu.

    Poslednou chybou milých indov je flag e, ktorý umožňuje spustiť výsledok regulárneho výrazu ako PHP kód (hmm, že by sa niekomu nechcelo písať eval?). Nasledovným requestom je možné zobraziť phpinfo.

    http://www.example.com/subor.php?replace=||/e%00&with=phpinfo();

    Takže aby sme sa v budúcnosti vyhli takýmto bezpečnostným problémom je potrebné obaliť užívateľom zadávané parametre preg_replace do preg_quote. Viacej info napr. tu. Krásny príklad použitia si môžte pozrieť na tomto odkaze.

    Zraniteľnosť cgi v spolupráci s nginx

    location ~* \.php$ {
      fastcgi_pass php_cgi;
      ...
    }

    Toto je krásna ukážka diery, pomocou ktorej môže útočník na serveri spustiť ľubovoľný PHP kód. Postačí na server prepašovať súbor obsahujúci PHP kód (napr. avatar obsahujúci <?php ... ?>). Potom stačí do prehliadača zadať nasledujúcu adresu a jpg súbor sa vykoná ako PHP skript.

    http://www.example.com/avatars/123.jpg/file.php

    Ako je to teda možné? Zapísané pravidlo v nginx nám hovorí, že všetky požiadavky končiace sa na .php nasmeruje na PHP CGI. To funguje správne. Problém je zase v PHP.

    V defaultnej konfigurácii však PHP skúsi nájsť súbor avatars/123.jpg/file.php. Ak neexistuje pokúsi sa nájsť súbor s podobnou cestou (v tomto prípade avatars/123.jpg) a vykoná ho ako PHP skript.

    Ako riešenie sa zvyčajne odporúča rôzny tuning nginx, alebo nastavenie cgi.fix_pathinfo=0 v php.ini.

    Zopár informácií o probléme tu, alebo priamo vo wiki k nginx.

    Ešte jeden vtip z dielne PHP. Viete ako sa kontroluje pretečenie int?

    int size;
    size = ...;
    if (size > INT_MAX) return NULL;

    Veľmi výživný text vrátane riešení s floatmi na use.perl.org ;-)

    Vtip 2: žiadne heslo - dobré heslo ;)

           

    Hodnocení: 94 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    Petr Tomášek avatar 10.5.2014 17:31 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    preg_replace('/'.$_GET['replace'].'/i', $_GET['with'], $str)

    Tak nevím, ale takový kód snad nemůže napsat ani největší zíma...

    multicult.fm | monokultura je zlo | welcome refugees!
    mirec avatar 10.5.2014 17:40 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Tiež som si hovoril. Radšej pomlčím o tom, v koľkých pluginoch wordpressu som takýto kód našiel ...
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    13.5.2014 09:45 R
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Idealny pocet volani preg_replace() v kode je nula. Niektori ludia sa vsak vyzivaju v regularnych vyrazoch a nasekaju tam potom kopu tazko riesitelnych bugov.
    pavlix avatar 13.5.2014 09:48 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Regexy jsou nástroj jako každý jiný, dají se používat dobře i špatně.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    13.5.2014 16:24 Sten
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ideální počet volání interpretru PHP je nula. Někteří lidé se ale vyžívají v masochismu a natahají tak na server kopu těžko řešitelných bezpečnostních děr ;-)
    10.5.2014 18:39 ja
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    A co na to mod_security?
    mirec avatar 10.5.2014 20:31 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Mám tak pocit, že by si poradil s null v preg_replace, ale pravdu povediac nikdy som mod_security nekonfiguroval (nie som správca, len programátor). Samozrejme druhý problém s hádaním cesty nemá šancu ovplyvniť, ale tento typ útoku sa v našom prípade nemohol stať, v každom prípade správanie php cgi ma celkom zaujalo.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    10.5.2014 19:50 psio
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    PHP je tak bad by design ze prechod na Python/Django bylo jak vysvobozeni. Tim netvrdim ze tu nejsou problemy s bezpecnosti, ale je to uplne jiny level. Chovani typu provedu cokoliv i to co nebylo explicitne volano, hlavne aby to vratilo nejaky vysledek misto vyjimky, me privadely k silenstvi. Uplne me desi ty weby ktery pustilo vedeni na internet a kde je to takovyma pastma prospikovany. Pripominky smetli do kose, hlavne ze to dostal zakaznik v terminu. Az se najde nekdo kdo to bude chtit zneuzit tak tu mame docela pekny botnet :(
    mirec avatar 10.5.2014 22:11 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ja momentálne pracujem prevažne na projektoch v djangu. Je to fakt obrovský rozdiel oproti PHP. Hlavne debugovanie (werkzeug) je neskutočne pohodlné. Dnes som narazil na wdb, budem musieť vyskúšať.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    10.5.2014 20:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    A to řešení kontrola na INT_MAX přes float je správné nebo bezpečné?
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 10.5.2014 22:08 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ani správne ani bezpečné, akurát to demonštruje schopnosti programátorov PHP.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    10.5.2014 22:20 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Oki, já jenom že píšeš „riešení s floatmi“ a ono to problém neřeší…, tak jsem nevěděl…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Jendа avatar 10.5.2014 22:17 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Asi ne, protože float bude mít (na většině architektur) 24 bitů, ale int 32. Takže dokážeš vyrobit float, který se zaokrouhlí dolu a přeteče ti pár znaků.
    10.5.2014 22:30 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ne-ne, float v podání PHP je double a int záleží na architektuře, tedy bude obvykle 64bit a to je, mimo jné, schopné testem projít a být to větší něž INT_MAX (INT64_MAX).
    Pokud máš 64bit systém, tak si zkus:
    php files.php
    <?php
    
    echo (int)PHP_INT_MAX,"<br />\n";
    echo number_format((double)PHP_INT_MAX,0,'.',''),"<br />\n";
    echo "--------------------------<br />\n";
    $var = 9223372036854775808.0;//an expresion
    if ($var > PHP_INT_MAX){
      echo "Error expresion is bigger then INT_MAX";
    }else{
      $myint = (int) $var;
      echo $myint," ¡WOW!<br />\n";
    }
    
    Pokud s eto chce dělat takto je třeba respektovat double a tedy testovat max na 9007199254740991 (nebo zjednodušeně na 15 míst 999999999999999).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    mirec avatar 10.5.2014 22:32 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    To bol float v zdrojákoch PHP a to je napísané v C, takže float je tam skutočne float.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    10.5.2014 22:40 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    A já proč se mi to nezdálo a jaktože je tam INT_MAX (místo PHP_INT_MAX) tak to si kluci dělají srandu - doufám. Nicméně na druhou stranu, variantu s INT64 a double je v C/C++ k vidění v různých variantách rozhodně častěji, než by mělo být…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    12.5.2014 06:27 Matlák
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ta narážka na float to calculate length of a string mi připoměla slavný článek PHP is a fractal of bad design. Každý člověk co alespoň trochu zavadil o PHP by si jej měl přečíst :-)
    12.5.2014 06:27 Matlák
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    10.5.2014 22:24 Jirka
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ani jedno
    12.5.2014 15:28 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Nerozbíjí náhodou cgi.fix_pathinfo=0 weby, které závisí na PATH_INFO? Mám za to, že v takových případech je stejně nějaký ten "tuning" nginx potřeba.
    Quando omni flunkus moritati
    mirec avatar 12.5.2014 19:23 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Áno, rozbíja. Kontrolovať existenciu súboru je možné aj na strane nginx, ale je potrebné aj tak vziať do úvahy možné race condition keď medzi kontrolou a vykonaním cgi bol súbor vymazaný. Najlepšie riešenie je zakázať vykonávanie .php v adresároch, ku ktorým má používateľ právo zapisovať.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Petr Tomášek avatar 12.5.2014 21:30 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Chyba. Nejlepší řešení je zakázat uživateli zapisovat do jakýchkoliv adresářů, které potom HTTP servíruje. Všechno je nutné ukládat někam mimo a pak mít skript, soubory pojmenovat nejlíp číslem, číslo mít v databázi a pak mít skript, který tyto soubory servíruje.
    multicult.fm | monokultura je zlo | welcome refugees!
    mirec avatar 12.5.2014 22:11 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Servírovať súbory skriptom je často v praxi nerealizovateľné. So surovým servírovaním súborov cez nginx dosiahnem rádovo 100x vyššiu priepustnosť než so skriptom. Za najlepšie považujem skôr odpútať sa od konceptu spúšťania nejakých skriptov podľa URL adresy a buď používať jazyk kde webová aplikácia routuje URL automaticky, alebo povoliť len hlavný PHP skript a routovať si URL adresy v ňom. Zvyšné súbory môžu byť v takom prípade bezpečne obsluhované priamo webovým serverom.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    13.5.2014 05:18 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    U velkých souborů ti také vyprší max execution time. Ale jinak soubory přejmenovat na nějaký hash určitě dobrý nápad je.
    Baník pyčo!
    13.5.2014 16:51 Sten
    Rozbalit Rozbalit vše Re: Null byte injection v preg_replace a nebezpečný nginx
    Ne, nejlepší řešení je používat routing, takže webová aplikace nenačítá kód ze souborů rozházených po adresářích za běhu. Ale to PHP neumí.

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.