Posebna HTTP zaglavlja

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Wordlists i alati

Zaglavlja za promenu lokacije

Prepiši izvor IP-a:

  • X-Originating-IP: 127.0.0.1
  • X-Forwarded-For: 127.0.0.1
  • X-Forwarded: 127.0.0.1
  • Forwarded-For: 127.0.0.1
  • X-Forwarded-Host: 127.0.0.1
  • X-Remote-IP: 127.0.0.1
  • X-Remote-Addr: 127.0.0.1
  • X-ProxyUser-Ip: 127.0.0.1
  • X-Original-URL: 127.0.0.1
  • Client-IP: 127.0.0.1
  • X-Client-IP: 127.0.0.1
  • X-Host: 127.0.0.1
  • True-Client-IP: 127.0.0.1
  • Cluster-Client-IP: 127.0.0.1
  • Via: 1.0 fred, 1.1 127.0.0.1
  • Connection: close, X-Forwarded-For (Proveri hop-by-hop zaglavlja)

Prepiši lokaciju:

  • X-Original-URL: /admin/console
  • X-Rewrite-URL: /admin/console

Hop-by-Hop headers

Hop-by-hop zaglavlje je zaglavlje koje treba da bude obrađeno i potrošeno od strane proxyja koji trenutno rukuje zahtevom, za razliku od end-to-end zaglavlja.

  • Connection: close, X-Forwarded-For

hop-by-hop headers

HTTP Request Smuggling

  • Content-Length: 30
  • Transfer-Encoding: chunked

HTTP Request Smuggling / HTTP Desync Attack

Zaglavlje Expect

Klijent može poslati zaglavlje Expect: 100-continue, nakon čega server može odgovoriti sa HTTP/1.1 100 Continue kako bi klijent nastavio sa slanjem tela zahteva. Međutim, neki proxyji ne vole ovo zaglavlje.

Zanimljivi efekti Expect: 100-continue:

  • Slanje HEAD zahteva sa telom — server nije uzeo u obzir da HEAD zahtevi obično nemaju telo i ostavio je konekciju otvorenom dok nije istekla.
  • Neki serveri su u odgovoru slali čudne podatke: nasumične bajtove pročitane iz socket-a, tajne ključeve ili čak su dozvoljavali da front-end ne ukloni određene vrednosti zaglavlja.
  • Takođe je izazvalo 0.CL desinhronizaciju kada backend odgovori sa 400 umesto 100, ali frontend proxy je bio spreman da pošalje telo inicijalnog zahteva, pa ga pošalje i backend ga tumači kao novi zahtev.
  • Varijanta Expect: y 100-continue takođe je izazvala 0.CL desinhronizaciju.
  • Slična greška gde je backend odgovorio sa 404 generisala je CL.0 desinhronizaciju zato što zlonamerni zahtev navodi Content-Length, pa backend pošalje zlonamerni zahtev + Content-Length bajtova sledećeg zahteva (žrtve). Ovo desinhronizuje red: backend šalje 404 odgovor za zlonamerni zahtev + odgovor za zahtev žrtve, dok frontend misli da je poslat samo jedan zahtev, pa drugi odgovor preusmeri na drugog korisnika i tako dalje…

Za više informacija o HTTP Request Smuggling pogledaj:

HTTP Request Smuggling / HTTP Desync Attack

Cache zaglavlja

Server Cache Headers:

  • X-Cache u odgovoru može imati vrednost miss kada zahtev nije bio u kešu i vrednost hit kada jeste keširan
  • Sličan prikaz u zaglavlju Cf-Cache-Status
  • Cache-Control pokazuje da li se resurs kešira i kada će biti sledeće keširanje: Cache-Control: public, max-age=1800
  • Vary se često koristi u odgovoru da naznači dodatna zaglavlja koja se tretiraju kao deo cache ključa, čak i ako obično nisu uključena u ključ.
  • Age definiše vreme u sekundama koliko je objekat bio u proxy kešu.
  • Server-Timing: cdn-cache; desc=HIT takođe ukazuje da je resurs bio keširan

Cache Poisoning and Cache Deception

Local Cache zaglavlja:

  • Clear-Site-Data: Zaglavlje koje označava keševe koji treba da budu obrisani: Clear-Site-Data: "cache", "cookies"
  • Expires: Sadrži datum/vreme kada odgovor treba da istekne: Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • Pragma: no-cache isto kao Cache-Control: no-cache
  • Warning: Generalno HTTP zaglavlje koje sadrži informacije o mogućim problemima sa statusom poruke. Više od jednog Warning zaglavlja može se pojaviti u odgovoru. Warning: 110 anderson/1.3.37 "Response is stale"

Uslovni zahtevi

  • Zahtevi koristeći zaglavlja If-Modified-Since i If-Unmodified-Since biće odgovoreni podacima samo ako odgovor sadrži drugačije vreme u zaglavlju Last-Modified.
  • Uslovni zahtevi koristeći If-Match i If-None-Match koriste vrednost Etag tako da web server pošalje sadržaj odgovora ako su podaci (Etag) promenjeni. Etag se uzima iz HTTP odgovora.
  • Vrednost Etag se obično izračunava na osnovu sadržaja odgovora. Na primer, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" znači da je Etag Sha1 za 37 bajtova.

Range zahtevi

  • Accept-Ranges: Označava da li server podržava range zahteve i u kojoj jedinici se raspon izražava. Accept-Ranges: <range-unit>
  • Range: Označava deo dokumenta koji server treba da vrati. Na primer, Range:80-100 će vratiti bajtove od 80 do 100 originalnog odgovora sa status kodom 206 Partial Content. Takođe zapamti da ukloniš Accept-Encoding zaglavlje iz zahteva.
  • Ovo može biti korisno da se dobije odgovor sa proizvoljnim reflektovanim javascript kodom koji bi inače bio escapovan. Ali da bi se zloupotrebilo ovo, potrebno je ubaciti ova zaglavlja u zahtev.
  • If-Range: Kreira uslovni range zahtev koji se ispunjava samo ako dati etag ili datum odgovara udaljenom resursu. Koristi se da se spreči preuzimanje dva raspona iz inkompatibilnih verzija resursa.
  • Content-Range: Označava gde u potpunom telu poruke delimična poruka pripada.

Informacije o telu poruke

  • Content-Length: Veličina resursa, u dekadnom broju bajtova.
  • Content-Type: Označava medija tip resursa
  • Content-Encoding: Koristi se za specificiranje algoritma kompresije.
  • Content-Language: Opisuje ljudski jezik(ove) za publiku, kako bi korisnik mogao da razlikuje prema sopstvenim preferencijama jezika.
  • Content-Location: Označava alternativnu lokaciju za vraćene podatke.

Sa stanovišta pentest-a ove informacije su obično “neupotrebljive”, ali ako je resurs zaštićen sa 401 ili 403 i možete naći neki način da dobijete ove info, to može biti zanimljivo.
Na primer, kombinacija Range i Etag u HEAD zahtevu može leak sadržaj stranice putem HEAD zahteva:

  • Zahtev sa zaglavljem Range: bytes=20-20 i odgovorom koji sadrži ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" leak-uje da je SHA1 bajta 20 ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y

Informacije o serveru

  • Server: Apache/2.4.1 (Unix)
  • X-Powered-By: PHP/5.3.3

Kontrole

  • Allow: Ovo zaglavlje se koristi da saopšti HTTP metode koje resurs može da obrađuje. Na primer, može biti Allow: GET, POST, HEAD, što znači da resurs podržava te metode.
  • Expect: Koristi se od strane klijenta da izrazi očekivanja koja server treba da ispuni da bi zahtev bio uspešno obrađen. Uobičajen primer je Expect: 100-continue zaglavlje, koje signalizira da klijent namerava da pošalje veliki payload podataka. Klijent očekuje 100 (Continue) pre nego što nastavi sa slanjem. Ovaj mehanizam pomaže u optimizaciji mrežnog saobraćaja tako što čeka potvrdu servera.

Preuzimanja

  • Content-Disposition zaglavlje u HTTP odgovorima određuje da li fajl treba da se prikaže inline (unutar web stranice) ili da bude tretiran kao attachment (preuzet). Na primer:
Content-Disposition: attachment; filename="filename.jpg"

Ovo znači da je fajl nazvan “filename.jpg” predviđen za preuzimanje i čuvanje.

Sigurnosna zaglavlja

Content Security Policy (CSP)

Content Security Policy (CSP) Bypass

Trusted Types

Primenom Trusted Types kroz CSP, aplikacije mogu biti zaštićene od DOM XSS napada. Trusted Types obezbeđuju da samo posebno pripremljeni objekti, usklađeni sa uspostavljenim sigurnosnim politikama, mogu biti korišćeni u opasnim web API pozivima, čime se JavaScript kod podrazumevano štiti.

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = "some string" // Throws an exception.
const escaped = policy.createHTML("<img src=x onerror=alert(1)>")
el.innerHTML = escaped // Results in safe assignment.

X-Content-Type-Options

Ovaj header sprečava MIME type sniffing, praksu koja može dovesti do XSS ranjivosti. On osigurava da pregledači poštuju MIME type-ove koje specificira server.

X-Content-Type-Options: nosniff

X-Frame-Options

Da bi se suzbio clickjacking, ovaj header ograničava na koji način se dokumenti mogu ugrađivati u <frame>, <iframe>, <embed> ili <object> tagove, preporučujući da svi dokumenti eksplicitno navedu svoja dopuštenja za ugradnju.

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP) and Cross-Origin Resource Sharing (CORS)

CORP je ključan za određivanje koji resursi mogu biti učitani od strane veb sajtova, smanjujući cross-site leaks. CORS, s druge strane, omogućava fleksibilniji cross-origin resource sharing mehanizam, opuštajući same-origin policy pod određenim uslovima.

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP) i Cross-Origin Opener Policy (COOP)

COEP i COOP su neophodni za omogućavanje cross-origin izolacije, što značajno smanjuje rizik od Spectre-like napada. COEP kontroliše učitavanje cross-origin resursa, a COOP kontroliše interakciju sa cross-origin prozorima.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

Na kraju, HSTS je sigurnosna funkcija koja primorava pretraživače da komuniciraju sa serverima samo preko sigurnih HTTPS konekcija, čime se poboljšava privatnost i bezbednost.

Strict-Transport-Security: max-age=3153600

Permissions-Policy (formerly Feature-Policy)

Permissions-Policy omogućava web programerima da selektivno omoguće, onemoguće ili izmene ponašanje određenih funkcionalnosti pregledača i API-ja unutar dokumenta. To je naslednik sada zastarelog Feature-Policy zaglavlja. Ovo zaglavlje pomaže da se smanji površina napada ograničavanjem pristupa moćnim funkcijama koje bi mogle biti zloupotrebljene.

Permissions-Policy: geolocation=(), camera=(), microphone=()

Uobičajene direktive:

DirectiveOpis
accelerometerKontroliše pristup senzoru akcelerometra
cameraKontroliše pristup uređajima za video ulaz (webcam)
geolocationKontroliše pristup Geolocation API
gyroscopeKontroliše pristup senzoru žiroskopa
magnetometerKontroliše pristup senzoru magnetometra
microphoneKontroliše pristup uređajima za audio ulaz
paymentKontroliše pristup Payment Request API
usbKontroliše pristup WebUSB API
fullscreenKontroliše pristup Fullscreen API
autoplayKontroliše da li mediji mogu automatski da se reprodukuju
clipboard-readKontroliše pristup čitanju sadržaja clipboard-a
clipboard-writeKontroliše pristup pisanju u clipboard

Vrednosti sintakse:

  • () - Onemogućava funkciju u potpunosti
  • (self) - Dozvoljava funkciju samo za isti origin
  • * - Dozvoljava funkciju za sve origin-e
  • (self "https://example.com") - Dozvoljava za isti origin i navedenu domenu

Primer konfiguracija:

# Restrictive policy - disable most features
Permissions-Policy: geolocation=(), camera=(), microphone=(), payment=(), usb=()

# Allow camera only from same origin
Permissions-Policy: camera=(self)

# Allow geolocation for same origin and a trusted partner
Permissions-Policy: geolocation=(self "https://maps.example.com")

Sa bezbednosne tačke gledišta, nedostajući ili previše permisivni Permissions-Policy headeri mogu omogućiti napadačima (npr. putem XSS ili ugrađenih iframe-ova) da zloupotrebe moćne funkcije browsera. Uvek ograničite funkcionalnosti na minimum neophodan za vašu aplikaciju.

Zaobilaženje provere velikih/malih slova u imenima headera

HTTP/1.1 definiše nazive header polja kao neosetljive na velika/mala slova (RFC 9110 §5.1). Ipak, vrlo je često naći custom middleware, security filtere, ili poslovnu logiku koja poredi literalno primljeno ime headera bez prethodne normalizacije pisma (npr. header.equals("CamelExecCommandExecutable")). Ako se te provere obavljaju osetljivo na velika/mala slova, napadač ih može zaobići jednostavnim slanjem istog headera sa drugačijom kapitalizacijom.

Tipične situacije gde se ova greška pojavljuje:

  • Prilagođene liste dozvoljenih/odbijenih koje pokušavaju da blokiraju “opasne” interne headere pre nego što zahtev stigne do osetljive komponente.
  • Interna implementacija reverse-proxy pseudo-headera (npr. X-Forwarded-For sanitizacija).
  • Framework-i koji izlažu management / debug endpoint-e i oslanjaju se na imena headera za autentifikaciju ili izbor komandi.

Zloupotreba zaobilaženja

  1. Identifikujte header koji se filtrira ili validira na serverskoj strani (na primer, čitanjem izvornog koda, dokumentacije, ili poruka o greškama).
  2. Pošaljite isti header sa drugačijom kapitalizacijom (mešovito ili velikim slovima). Pošto HTTP stack-ovi obično normalizuju headere tek posle izvršavanja korisničkog koda, ranjiva provera može biti preskočena.
  3. Ako downstream komponenta tretira headere neosetljivo na velika/mala slova (većina ih to radi), prihvatiće vrednost pod kontrolom napadača.

Example: Apache Camel exec RCE (CVE-2025-27636)

U ranjivim verzijama Apache Camel, Command Center rute pokušavaju da blokiraju nepouzdane zahteve uklanjanjem header-a CamelExecCommandExecutable i CamelExecCommandArgs. Poređenje je rađeno pomoću equals() pa su uklanjana samo imena sa tačnom kapitalizacijom.

# Bypass the filter by using mixed-case header names and execute `ls /` on the host
curl "http://<IP>/command-center" \
-H "CAmelExecCommandExecutable: ls" \
-H "CAmelExecCommandArgs: /"

Zaglavlja dopiru do exec komponente nefiltrirano, što rezultira remote command execution sa privilegijama Camel procesa.

Otkrivanje i ublažavanje

  • Normalizujte sva imena headera u jedan oblik (obično lowercase) pre izvršavanja allow/deny poređenja.
  • Odbacite sumnjive duplikate: ako su prisutni i Header: i HeAdEr:, tretirajte to kao anomaliju.
  • Koristite pozitivnu listu dozvoljenih (allow-list) koja se primenjuje nakon kanonizacije.
  • Zaštitite upravljačke endpoint-e autentifikacijom i mrežnom segmentacijom.

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks