νΉμ HTTP ν€λ
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
μλ리μ€νΈ & λꡬ
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers
- https://github.com/rfc-st/humble
μμΉλ₯Ό λ³κ²½ν ν€λ
IP μμ€ μ¬μμ±:
X-Originating-IP: 127.0.0.1X-Forwarded-For: 127.0.0.1X-Forwarded: 127.0.0.1Forwarded-For: 127.0.0.1X-Forwarded-Host: 127.0.0.1X-Remote-IP: 127.0.0.1X-Remote-Addr: 127.0.0.1X-ProxyUser-Ip: 127.0.0.1X-Original-URL: 127.0.0.1Client-IP: 127.0.0.1X-Client-IP: 127.0.0.1X-Host: 127.0.0.1True-Client-IP: 127.0.0.1Cluster-Client-IP: 127.0.0.1Via: 1.0 fred, 1.1 127.0.0.1Connection: close, X-Forwarded-For(hop-by-hop ν€λ νμΈ)
μμΉ μ¬μμ±:
X-Original-URL: /admin/consoleX-Rewrite-URL: /admin/console
Hop-by-Hop ν€λ
Hop-by-Hop ν€λλ end-to-end ν€λμ λ¬λ¦¬ νμ¬ μμ²μ μ²λ¦¬ μ€μΈ νλ‘μκ° μ²λ¦¬νκ³ μλΉνλλ‘ μ€κ³λ ν€λμ λλ€.
Connection: close, X-Forwarded-For
HTTP Request Smuggling
Content-Length: 30Transfer-Encoding: chunked
HTTP Request Smuggling / HTTP Desync Attack
Expect ν€λ
ν΄λΌμ΄μΈνΈκ° Expect: 100-continue ν€λλ₯Ό λ³΄λΈ λ€ μλ²κ° HTTP/1.1 100 Continueλ‘ μλ΅νμ¬ ν΄λΌμ΄μΈνΈκ° μμ² λ³Έλ¬Έ μ μ‘μ κ³μνλλ‘ νμ©νλ κ²μ΄ κ°λ₯ν©λλ€. κ·Έλ¬λ μΌλΆ νλ‘μλ μ΄ ν€λλ₯Ό μ λλ‘ μ’μνμ§ μμ΅λλ€.
Expect: 100-continueλ‘ μΈν ν₯λ―Έλ‘μ΄ κ²°κ³Όλ€:
- λ³Έλ¬Έμ κ°μ§ HEAD μμ²μ 보λμ λ, μλ²κ° HEAD μμ²μλ λ³Έλ¬Έμ΄ μλ€λ κ²μ κ³ λ €νμ§ μμ μ°κ²°μ μ΄μ΄λκ³ νμμμλ λκΉμ§ μ μ§ν μ¬λ‘κ° μμ΅λλ€.
- λ€λ₯Έ μλ²λ€μ μλ΅μμ μμΌμμ μ½μ λλ€ λ°μ΄ν°, λΉλ° ν€ κ°μ μ΄μν λ°μ΄ν°λ₯Ό 보λκ±°λ, νλ‘ νΈμλκ° ν€λ κ°μ μ κ±°νμ§ λͺ»νκ² νλ κ²½μ°κ° μμμ΅λλ€.
- λ°±μλκ° 100 μλ΅ λμ 400 μλ΅μΌλ‘ μλ΅νμ λ
0.CLλ°μ€μ±ν¬κ° λ°μνμ΅λλ€. νλ‘μ νλ°νΈμλλ μ΄κΈ° μμ²μ λ³Έλ¬Έμ λ³΄λΌ μ€λΉκ° λμ΄ μμκΈ° λλ¬Έμ λ³Έλ¬Έμ 보λ΄κ³ , λ°±μλλ μ΄λ₯Ό μλ‘μ΄ μμ²μΌλ‘ μ²λ¦¬νμ΅λλ€. Expect: y 100-continueλ³νμ 보λ΄λ0.CLλ°μ€μ±ν¬κ° λ°μνμ΅λλ€.- λ°±μλκ° 404λ‘ μλ΅ν κ²½μ° μ μ¬ν μ€λ₯λ‘
CL.0λ°μ€μ±ν¬κ° λ°μνμ΅λλ€. μ μμ μΈ μμ²μ΄Content-Lengthλ₯Ό νμνλ―λ‘ λ°±μλλ μ μ± μμ² + λ€μ μμ²(νΌν΄μ)μContent-Lengthλ°μ΄νΈλ₯Ό 보λ΄κ³ , μ΄λ νλ₯Ό λΉλκΈ°νν΄μ λ°±μλλ μ μ± μμ²μ λν΄ 404 μλ΅κ³Ό νΌν΄μ μμ²λ€μ μλ΅μ 보λ΄μ§λ§ νλ°νΈμλλ νλμ μμ²λ§ 보λλ€κ³ μκ°νμ¬ λ λ²μ§Έ μλ΅μ λ€λ₯Έ νΌν΄μμκ² λ³΄λ΄λ μμΌλ‘ κΌ¬μ λλ€β¦
HTTP Request Smugglingμ λν λ λ§μ μ 보λ λ€μμ νμΈνμΈμ:
HTTP Request Smuggling / HTTP Desync Attack
μΊμ ν€λ
μλ² μΊμ ν€λ:
X-Cacheμλ΅μμ κ°μ΄ **miss**μ΄λ©΄ μμ²μ΄ μΊμλμ§ μμμμ, **hit**μ΄λ©΄ μΊμλμμμ λνλΌ μ μμ΅λλ€.Cf-Cache-Statusν€λμμλ μ μ¬ν λμμ κ΄μ°°ν μ μμ΅λλ€.- **
Cache-Control**μ 리μμ€κ° μΊμλλμ§μ λ€μ μΊμ λ§λ£ μκ°μ λνλ λλ€:Cache-Control: public, max-age=1800 - **
Vary**λ μλ΅μμ μ’ μ’ μΆκ° ν€λλ€μ μΊμ ν€μ μΌλΆλ‘ μ·¨κΈνλ€κ³ νμν λ μ¬μ©λ©λλ€(μΌλ°μ μΌλ‘ ν€λ‘ μ¬μ©λμ§ μλ ν€λλΌλ). - **
Age**λ κ°μ²΄κ° νλ‘μ μΊμμμ μ‘΄μ¬ν μκ°μ μ΄ λ¨μλ‘ μ μν©λλ€. - **
Server-Timing: cdn-cache; desc=HIT**λ 리μμ€κ° μΊμλμμμ λνλ λλ€.
Cache Poisoning and Cache Deception
λ‘컬 μΊμ ν€λ:
Clear-Site-Data: μ κ±°ν΄μΌ ν μΊμ μ’ λ₯λ₯Ό μ§μ νλ ν€λ:Clear-Site-Data: "cache", "cookies"Expires: μλ΅μ΄ λ§λ£λλ λ μ§/μκ°μ ν¬ν¨:Expires: Wed, 21 Oct 2015 07:28:00 GMTPragma: no-cacheλCache-Control: no-cacheμ λμΌν¨Warning: μΌλ° HTTP ν€λμΈ **Warning**μ λ©μμ§ μνμ κ΄λ ¨ν κ°λ₯ν λ¬Έμ μ λν μ 보λ₯Ό ν¬ν¨ν©λλ€. μλ΅μ 볡μμWarningν€λκ° λνλ μ μμ΅λλ€. μ:Warning: 110 anderson/1.3.37 "Response is stale"
μ‘°κ±΄λΆ μμ²
If-Modified-Sinceλ°If-Unmodified-Sinceν€λλ₯Ό μ¬μ©ν μμ²μ μλ΅ ν€λ **Last-Modified**κ° λ€λ₯Έ μκ°μ ν¬ν¨νλ κ²½μ°μλ§ λ°μ΄ν°λ₯Ό μλ΅λ°μ΅λλ€.If-Matchλ° **If-None-Match**μ μ¬μ©νλ μ‘°κ±΄λΆ μμ²μ Etag κ°μ μ¬μ©νλ―λ‘ μΉ μλ²λ λ°μ΄ν°(Etag)κ° λ³κ²½λ κ²½μ°μλ§ μλ΅ λ΄μ©μ 보λ λλ€.Etagλ HTTP μλ΅μμ κ°μ Έμ΅λλ€.- Etag κ°μ λ³΄ν΅ μλ΅μ λ΄μ©μ κΈ°λ°μΌλ‘ κ³μ°λ©λλ€. μλ₯Ό λ€μ΄
ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"λEtagκ° 37 λ°μ΄νΈμ Sha1μμ λνλ λλ€.
Range μμ²
Accept-Ranges: μλ²κ° Range μμ²μ μ§μνλμ§, μ§μνλ€λ©΄ μ΄λ€ λ¨μλ‘ λ²μλ₯Ό ννν μ μλμ§ λνλ λλ€.Accept-Ranges: <range-unit>Range: μλ²κ° λ°νν΄μΌ νλ λ¬Έμμ λΆλΆμ λνλ λλ€. μ:Range:80-100μ μλ μλ΅μ λ°μ΄νΈ 80μμ 100μ λ°ννλ©° μν μ½λλ 206 Partial Contentκ° λ©λλ€. λν μμ²μμAccept-Encodingν€λλ₯Ό μ κ±°νλ κ²μ κΈ°μ΅νμΈμ.- μ΄λ μλλΌλ©΄ μ΄μ€μΌμ΄νλλ μμμ λ°μ¬λ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ν¬ν¨ν μλ΅μ μ»λ λ° μ μ©ν μ μμ΅λλ€. νμ§λ§ μ΄λ₯Ό μ μ©νλ €λ©΄ μμ²μ μ΄λ° ν€λλ€μ μ£Όμ ν΄μΌ ν©λλ€.
If-Range: μ£Όμ΄μ§ etag λλ λ μ§κ° μ격 리μμ€μ μΌμΉνλ κ²½μ°μλ§ μΆ©μ‘±λλ μ‘°κ±΄λΆ λ²μ μμ²μ μμ±ν©λλ€. μλ‘ νΈνλμ§ μλ λ²μ μ 리μμ€μμ λ κ°μ λ²μλ₯Ό λ€μ΄λ‘λνλ κ²μ λ°©μ§νλ λ° μ¬μ©λ©λλ€.Content-Range: λΆλΆ λ©μμ§κ° μ 체 λ³Έλ¬Έ λ©μμ§μ μ΄λμ μνλμ§λ₯Ό λνλ λλ€.
λ©μμ§ λ³Έλ¬Έ μ 보
Content-Length: 리μμ€μ ν¬κΈ°(μμ§μ λ°μ΄νΈ μ).Content-Type: 리μμ€μ λ―Έλμ΄ νμ μ λνλContent-Encoding: μμΆ μκ³ λ¦¬μ¦μ μ§μ νλ λ° μ¬μ©λ¨.Content-Language: μλλ μ²μ€μ μΈκ° μΈμ΄λ₯Ό μ€λͺ νμ¬ μ¬μ©μκ° μ νΈνλ μΈμ΄μ λ°λΌ ꡬλΆν μ μκ² ν¨.Content-Location: λ°νλ λ°μ΄ν°μ λ체 μμΉλ₯Ό λνλ.
pentest κ΄μ μμλ μ΄ μ λ³΄κ° λ³΄ν΅ βμΈλͺ¨μμβμΈ κ²½μ°κ° λ§μ§λ§, 리μμ€κ° 401 λλ 403μΌλ‘ 보νΈλμ΄ μκ³ μ΄ μ 보λ₯Ό μ»μ μ μλ μ΄λ€ λ°©λ²μ μ°Ύμ μ μλ€λ©΄ ν₯λ―Έλ‘μΈ μ μμ΅λλ€.
μλ₯Ό λ€μ΄ HEAD μμ²μμ **Range**μ **Etag**μ μ‘°ν©μ HEAD μμ²μ ν΅ν΄ νμ΄μ§μ λ΄μ©μ leakν μ μμ΅λλ€:
- ν€λ
Range: bytes=20-20λ‘ μμ²νκ³ μλ΅μETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"κ° ν¬ν¨λμ΄ μλ€λ©΄, λ°μ΄νΈ 20μ SHA1μ΄ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Yμμ leakνκ³ μλ κ²μ λλ€.
μλ² μ 보
Server: Apache/2.4.1 (Unix)X-Powered-By: PHP/5.3.3
μ μ΄ ν€λ
Allow: μ΄ ν€λλ 리μμ€κ° μ²λ¦¬ν μ μλ HTTP λ©μλλ₯Ό μ λ¬νλ λ° μ¬μ©λ©λλ€. μ:Allow: GET, POST, HEADλ 리μμ€κ° μ΄ λ©μλλ€μ μ§μν¨μ λνλ λλ€.Expect: ν΄λΌμ΄μΈνΈκ° μμ²μ μ±κ³΅μ μΌλ‘ μ²λ¦¬νκΈ° μν΄ μλ²κ° μΆ©μ‘±ν΄μΌ ν κΈ°λ μ¬νμ μ λ¬νλ λ° μ¬μ©λ©λλ€. μΌλ°μ μΈ μ¬μ© μ¬λ‘λ ν° λ°μ΄ν°λ₯Ό μ μ‘νλ €λ ν΄λΌμ΄μΈνΈκ° 보λ΄λExpect: 100-continueν€λλ‘, ν΄λΌμ΄μΈνΈλ μ μ‘μ κ³μνκΈ° μ μ100 (Continue)μλ΅μ κΈ°λ€λ¦½λλ€. μ΄ λ©μ»€λμ¦μ μλ² νμΈμ κΈ°λ€λ¦ΌμΌλ‘μ¨ λ€νΈμν¬ μ¬μ©μ μ΅μ ννλ λ° λμμ μ€λλ€.
λ€μ΄λ‘λ
HTTP μλ΅μ Content-Disposition ν€λλ νμΌμ μΉνμ΄μ§ λ΄μμ νμν μ§(μΈλΌμΈ) μλλ©΄ **첨λΆ(λ€μ΄λ‘λ)**λ‘ μ²λ¦¬ν μ§ μ§μν©λλ€. μλ₯Ό λ€λ©΄:
Content-Disposition: attachment; filename="filename.jpg"
μ΄λ βfilename.jpgβλΌλ νμΌμ΄ λ€μ΄λ‘λλμ΄ μ μ₯λμ΄μΌ ν¨μ μλ―Έν©λλ€.
보μ ν€λ
μ½ν μΈ λ³΄μ μ μ± (CSP)
Content Security Policy (CSP) Bypass
Trusted Types
CSPλ₯Ό ν΅ν΄ Trusted Typesλ₯Ό κ°μ νλ©΄ μ ν리μΌμ΄μ μ DOM XSS 곡격μΌλ‘λΆν° 보νΈν μ μμ΅λλ€. Trusted Typesλ 보μ μ μ± μ μ€μνλ νΉμ νκ² μ μλ κ°μ²΄λ§μ΄ μνν web API νΈμΆμ μ¬μ©λλλ‘ λ³΄μ₯νμ¬ JavaScript μ½λλ₯Ό κΈ°λ³Έμ μΌλ‘ μμ νκ² λ§λλλ€.
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '<').replace(/>/g, '>');
});
}
// 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
μ΄ ν€λλ MIME type sniffingμ λ°©μ§ν©λλ€. μ΄λ XSS μ·¨μ½μ μΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. λΈλΌμ°μ κ° μλ²μμ μ§μ ν MIME νμ μ μ‘΄μ€νλλ‘ λ³΄μ₯ν©λλ€.
X-Content-Type-Options: nosniff
X-Frame-Options
μ΄ ν€λλ clickjackingμ λ°©μ§νκΈ° μν΄ λ¬Έμκ° <frame>, <iframe>, <embed>, λλ <object> νκ·Έμ μ΄λ»κ² ν¬ν¨λ μ μλμ§λ₯Ό μ ννλ©°, λͺ¨λ λ¬Έμκ° ν¬ν¨ νμ©μ λͺ
μμ μΌλ‘ μ§μ ν κ²μ κΆμ₯ν©λλ€.
X-Frame-Options: DENY
ν¬λ‘μ€-μ€λ¦¬μ§ 리μμ€ μ μ± (CORP) λ° ν¬λ‘μ€-μ€λ¦¬μ§ 리μμ€ κ³΅μ (CORS)
CORPλ μΉμ¬μ΄νΈμμ λ‘λν μ μλ 리μμ€λ₯Ό μ§μ νλ λ° λ§€μ° μ€μνλ©°, cross-site leaksλ₯Ό μνν©λλ€. CORSλ λ°λ©΄ λ³΄λ€ μ μ°ν cross-origin 리μμ€ κ³΅μ λ©μ»€λμ¦μ νμ©νμ¬ νΉμ 쑰건μμ same-origin policyλ₯Ό μνν©λλ€.
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
κ΅μ°¨ μΆμ² μλ² λ μ μ± (COEP) λ° κ΅μ°¨ μΆμ² μ€νλ μ μ± (COOP)
COEPμ COOPλ κ΅μ°¨ μΆμ² 격리λ₯Ό κ°λ₯νκ² νλ λ° νμμ μ΄λ©°, Spectre-like attacksμ μνμ ν¬κ² μ€μ¬μ€λλ€. μ΄λ€μ κ°κ° κ΅μ°¨ μΆμ² 리μμ€μ λ‘λ©κ³Ό κ΅μ°¨ μΆμ² μ°½κ³Όμ μνΈμμ©μ μ μ΄ν©λλ€.
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
HTTP Strict Transport Security (HSTS)
λ§μ§λ§μΌλ‘, HSTSλ λΈλΌμ°μ κ° μλ²μ μ€μ§ μμ ν HTTPS μ°κ²°λ‘λ§ ν΅μ νλλ‘ κ°μ νλ 보μ κΈ°λ₯μΌλ‘, μ΄λ‘μ¨ κ°μΈμ 보 보νΈμ 보μμ κ°νν©λλ€.
Strict-Transport-Security: max-age=3153600
Permissions-Policy (formerly Feature-Policy)
Permissions-Policyλ μΉ κ°λ°μκ° λ¬Έμ λ΄μμ νΉμ λΈλΌμ°μ κΈ°λ₯κ³Ό APIμ λμμ μ νμ μΌλ‘ νμ±νΒ·λΉνμ±ννκ±°λ μμ ν μ μκ² ν©λλ€. μ΄λ νμ¬ νκΈ°λ Feature-Policy ν€λμ νμμ
λλ€. μ΄ ν€λλ μ
μ©λ μ μλ κ°λ ₯ν κΈ°λ₯μ λν μ κ·Όμ μ ννμ¬ attack surfaceλ₯Ό μ€μ΄λ λ° λμμ μ€λλ€.
Permissions-Policy: geolocation=(), camera=(), microphone=()
μΌλ° λλ ν°λΈ:
| λλ ν°λΈ | μ€λͺ |
|---|---|
accelerometer | Accelerometer μΌμμ λν μ κ·Όμ μ μ΄ν©λλ€ |
camera | λΉλμ€ μ λ ₯ μ₯μΉ(μΉμΊ )μ λν μ κ·Όμ μ μ΄ν©λλ€ |
geolocation | Geolocation APIμ λν μ κ·Όμ μ μ΄ν©λλ€ |
gyroscope | Gyroscope μΌμμ λν μ κ·Όμ μ μ΄ν©λλ€ |
magnetometer | Magnetometer μΌμμ λν μ κ·Όμ μ μ΄ν©λλ€ |
microphone | μ€λμ€ μ λ ₯ μ₯μΉμ λν μ κ·Όμ μ μ΄ν©λλ€ |
payment | Payment Request APIμ λν μ κ·Όμ μ μ΄ν©λλ€ |
usb | WebUSB APIμ λν μ κ·Όμ μ μ΄ν©λλ€ |
fullscreen | Fullscreen APIμ λν μ κ·Όμ μ μ΄ν©λλ€ |
autoplay | λ―Έλμ΄μ μλ μ¬μ νμ© μ¬λΆλ₯Ό μ μ΄ν©λλ€ |
clipboard-read | ν΄λ¦½λ³΄λ λ΄μ©μ μ½λ μ κ·Όμ μ μ΄ν©λλ€ |
clipboard-write | ν΄λ¦½λ³΄λμ μ°λ μ κ·Όμ μ μ΄ν©λλ€ |
ꡬ문 κ°:
()- κΈ°λ₯μ μμ ν λΉνμ±νν©λλ€(self)- λμΌν μΆμ²μμλ§ κΈ°λ₯μ νμ©ν©λλ€*- λͺ¨λ μΆμ²μ λν΄ κΈ°λ₯μ νμ©ν©λλ€(self "https://example.com")- λμΌ μΆμ²μ μ§μ λ λλ©μΈμ λν΄ νμ©ν©λλ€
μμ ꡬμ±:
# 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")
From a security perspective, missing or overly permissive Permissions-Policy headers may allow attackers (e.g., through XSS or embedded iframes) to abuse powerful browser features. Always restrict features to the minimum necessary for your application.
Header Name Casing Bypass
HTTP/1.1 defines header fieldβnames as case-insensitive (RFC 9110 Β§5.1). Nevertheless, it is very common to find custom middleware, security filters, or business logic that compare the literal header name received without normalising the casing first (e.g. header.equals("CamelExecCommandExecutable")). If those checks are performed case-sensitively, an attacker may bypass them simply by sending the same header with a different capitalisation.
Typical situations where this mistake appears:
- Custom allow/deny lists that try to block βdangerousβ internal headers before the request reaches a sensitive component.
- In-house implementations of reverse-proxy pseudo-headers (e.g.
X-Forwarded-Forsanitisation). - Frameworks that expose management / debug endpoints and rely on header names for authentication or command selection.
Abusing the bypass
- Identify a header that is filtered or validated server-side (for example, by reading source code, documentation, or error messages).
- Send the same header with a different casing (mixed-case or upper-case). Because HTTP stacks usually canonicalise headers only after user code has run, the vulnerable check can be skipped.
- If the downstream component treats headers in a case-insensitive way (most do), it will accept the attacker-controlled value.
Example: Apache Camel exec RCE (CVE-2025-27636)
In vulnerable versions of Apache Camel the Command Center routes try to block untrusted requests by stripping the headers CamelExecCommandExecutable and CamelExecCommandArgs. The comparison was done with equals() so only the exact lowercase names were removed.
# 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: /"
ν€λκ° νν°λ§λμ§ μμ μ± exec μ»΄ν¬λνΈμ λλ¬νμ¬ Camel νλ‘μΈμ€μ κΆνμΌλ‘ remote command executionμ μ΄λν©λλ€.
νμ§ λ° μν
- νμ©/κ±°λΆ λΉκ΅λ₯Ό μννκΈ° μ΄μ μ, λͺ¨λ ν€λ μ΄λ¦μ νλμ μΌμ΄μ€(λ³΄ν΅ μλ¬Έμ)λ‘ μ κ·ννμΈμ.
- μμ¬μ€λ¬μ΄ μ€λ³΅μ κ±°λΆνμΈμ:
Header:μHeAdEr:κ° λμμ μ‘΄μ¬νλ©΄ μ΄λ₯Ό μ΄μ(anomaly)μΌλ‘ μ²λ¦¬νμΈμ. - μ κ·ν μ΄νμ μ μ©λλ κΈμ μ νμ© λͺ©λ‘(allow-list)μ μ¬μ©νμΈμ.
- κ΄λ¦¬μ© μλν¬μΈνΈλ μΈμ¦κ³Ό λ€νΈμν¬ λΆλ¦¬λ‘ 보νΈνμΈμ.
μ°Έκ³ μλ£
- CVE-2025-27636 β RCE in Apache Camel via header casing bypass (OffSec blog)
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- https://web.dev/security-headers/
- https://web.dev/articles/security-headers
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


