Articles

CRLF Injection a HTTP Response štípací zranitelnost

co je CRLF?

když prohlížeč odešle požadavek na webový server, webový server odpoví zpět odpovědí obsahující hlavičky HTTP odpovědí i skutečný obsah webu, tj. tělo odpovědi. Hlavičky HTTP a HTML odpověď (obsah webových stránek) jsou odděleny specifickou kombinací speciálních znaků, jmenovitě návratem vozíku a linkovým krmivem. Zkrátka jsou také známé jako CRLF.

webový server používá CRLF k pochopení, kdy začíná nová hlavička HTTP a končí další. CRLF může také říct webové aplikaci nebo uživateli, že nový řádek začíná v souboru nebo v textovém bloku. Znaky CRLF jsou standardní zprávou HTTP / 1.1, takže ji používá jakýkoli typ webového serveru, včetně Apache, Microsoft IIS a všech ostatních.

CRLF Injection and HTTP Response Splitting zranitelnost

co je zranitelnost CRLF Injection?

V CRLF injection útoku zranitelnosti útočník vloží oba návrat vozíku a konce řádku znaky na vstup uživatele přimět server, webové aplikace nebo uživatele do myšlení, že objekt je ukončen a další začala. Jako takové CRLF sekvence nejsou škodlivé znaky, nicméně mohou být použity pro škodlivý záměr, pro rozdělení HTTP odpovědí atd.

CRLF injekce ve webových aplikacích

ve webových aplikacích může mít injekce CRLF vážné dopady v závislosti na tom, co aplikace dělá s jednotlivými položkami. Dopady se mohou pohybovat od zveřejnění informací až po spuštění kódu, což je zranitelnost zabezpečení webových aplikací s přímým dopadem. Ve skutečnosti CRLF injekční útok může mít velmi vážné dopady na webové aplikace, i když to nikdy nebyl uveden v OWASP Top 10 seznam. Například je také možné manipulovat se soubory protokolu v administrátorském panelu, jak je vysvětleno v následujícím příkladu.

příklad injekce CRLF v souboru protokolu

Představte si soubor protokolu v administrátorském panelu se vzorem výstupního proudu cesty navštívené IP, jako je níže:

123.123.123.123 - 08:15 - /index.php?page=home

Pokud je útočník schopen vložit znaky CRLF do požadavku HTTP, je schopen změnit výstupní proud a předstírat záznamy protokolu. On může změnit reakci z pavučin aplikace něco jako níže:

/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

%0d %0a jsou url kódované formy CR a LF. Položky protokolu by tedy vypadaly takto poté, co útočník vložil tyto znaky a aplikace je zobrazí:

IP – Čas – Navštívené Cesty,

123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit

Proto využíváním CRLF injection zranitelnosti může útočník falešné položky v souboru protokolu obfuscate jeho vlastní škodlivých akcí. Útočník doslova dělá únos stránky a upravuje odpověď. Představte si například scénář, kdy útočník má heslo správce a provedl parametr restrictedaction, který může použít pouze správce.

problém je v tom, že pokud Správce zjistí, že neznámá IP použila parametr restrictedaction, všimne si, že je něco špatně. Od té doby to však vypadá, že příkaz byl vydán localhost (a proto pravděpodobně někdo, kdo má přístup k serveru, jako admin), nevypadá podezřele.

celá část dotazu začínající %0d%0a bude zpracována serverem jako jeden parametr. Poté je zde další & s parametrem restrictedactionkterý bude serverem analyzován jako další parametr. Ve skutečnosti by to byl stejný dotaz jako:

/index.php?page=home&restrictedaction=edit

HTTP Odpovědi Rozdělení

Popis

Od záhlaví HTTP odpovědi a jeho tělo jsou odděleny znaky CRLF útočník může zkusit aplikovat. Kombinace CRLFCRLF řekne prohlížeči, že záhlaví končí a tělo začíná. To znamená, že je nyní schopen psát data uvnitř těla odpovědi, kde je uložen html kód. To může vést k zranitelnosti skriptování mezi weby.

příklad rozdělení odezvy HTTP vedoucí k XSS

Představte si aplikaci, která nastaví vlastní hlavičku, například:

X-Your-Name: Bob

hodnota záhlaví se nastavuje pomocí parametru get s názvem „name“. Pokud není zadáno žádné kódování URL a hodnota se přímo odráží uvnitř záhlaví, může být možné, aby útočník vložil výše uvedenou kombinaci CRLFCRLF, aby sdělil prohlížeči, že tělo požadavku začíná. Tímto způsobem má možnost vložit data, jako jsou XSS náklad, například:

?name=Bob%0d%0a%0d%0a<script>alert(document.domain)</script>

výše uvedené zobrazí alert okno v kontextu napadené domény.

HTTP Hlavičky Injekce

Popis

využíváním CRLF injection útočník může také vložit záhlaví HTTP, které by mohly být použity k porážce bezpečnostní mechanismy, jako jsou prohlížeče, je XSS filtr nebo stejného původu-politiky. To umožňuje útočníkovi získat citlivé informace, jako jsou tokeny CSRF. Může také nastavit soubory cookie, které by mohly být využity přihlášením oběti do účtu útočníka nebo využitím jinak nevyužitelných zranitelností skriptování mezi weby (XSS).

příklad HTTP Hlavičky Injekci extraktu citlivé údaje

v Případě, že útočník je schopen aplikovat záhlaví HTTP, které aktivují CORS (Cross Origin Sdílení Zdrojů), může se použít javascript, aby přístup k prostředkům, které jsou jinak chráněny SOP (same Origin Policy), která zabraňuje weby z různých zemí původu, přístup k sobě navzájem.

dopady zranitelnosti CRLF injection

dopad injekcí CRLF se liší a zahrnuje také všechny dopady skriptování mezi weby na zveřejnění informací. Může také deaktivovat určitá bezpečnostní omezení, jako jsou filtry XSS a stejné zásady původu v prohlížečích oběti, takže jsou náchylné k škodlivým útokům.

jak zabránit injekcím hlavičky CRLF / HTTP ve webových aplikacích

nejlepší technikou prevence je nepoužívat vstup uživatelů přímo do záhlaví odpovědí. Pokud to není možné, měli byste vždy použít funkci pro kódování speciálních znaků CRLF. Další dobrou nejlepší praxí zabezpečení webových aplikací je aktualizace programovacího jazyka na verzi, která neumožňuje vložení CR a LF do funkcí, které nastavují hlavičky HTTP.

Chyba Klasifikace a Závažnost Tabulka

Klasifikace ID / Závažnost
PCI v3.2 6.5.1
OWASP 2013 A1
OWASP 2017 A1
CWE 93
CAPEC 105
WASC 24
HIPAA 164.306(a), 164.308(a)
ISO27001 A.14.2.5
CVSS:3.0
CVSS:3.0: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:H
Netsparker Medium
Stay up to date on web security trends