HTTP Host ããããŒæ»æã¯ãæ»æè ã«ãšã£ãŠäžè¬çãªææ³ãšãªã£ãŠãããããã€ãã®ããªãšãŒã·ã§ã³ããããŸããæ»æã®è©³çްãšããããããããã圱é¿ã«ã€ããŠæ·±ãæãäžããåã«ããŸã㯠HTTP Host ããããŒãšã¯äœãã«ã€ããŠèª¬æããããšããå§ããŸãã
HTTP Host ããããŒãšã¯äœã§ããïŒ
HTTP Host ããããŒã¯ãã¹ãåãããŒãçªå·ã®æ å ±ãæäŸããè€æ°ã®ãã¡ã€ã³ããã®ãªã¯ãšã¹ããåŠçããéããªãªãžã³ãµãŒããŒã䜿çšãããªãœãŒã¹ã決å®ããã®ã«åœ¹ç«ã€ããšãç®çãšããŠããŸãã
ãã®ä»ã® Host ããããŒ
ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠã¯ããX-Forwarded-HostãããX-Hostããªã©ã®è¿œå ã®ãã¹ãã«äŒŒãããããŒã§ Host ããããŒãè£å®ããããšããããŸãããããã®æ å ±ã¯ã以äžã®æ»æã®èª¬æã®äžéšã§äœ¿çšãããŸããããããé©åã«äœ¿çšããªãå ŽåãHost ããããŒãšåæ§ãªè匱æ§ãçããããã§ãã
HTTP Host ããããŒæ»æã®çš®é¡
Host ããããŒã¯ã€ã³ã¿ãŒãããã䜿çšããäžã§éèŠãªèŠçŽ ã§ãããHost ããããŒãæé»çã«ä¿¡é Œãããããè¿œå æ©èœã«äœ¿çšãããããäžé©åã«èšå®ãããããããšãã¢ããªã±ãŒã·ã§ã³ã¯è匱æ§ã«ãããããå¯èœæ§ããããŸããæ»æè ã Host ããããŒã«ããŸããŸãªçš®é¡ã®ã³ã³ãã³ããæ¿å ¥ããããšã§ããã®åäœãæªçšããæ¬¡ã®ãããªããæ·±å»ãªè匱æ§ãåŒãèµ·ããå¯èœæ§ããããŸãã
ãã¹ãããããŒãã€ãºãã³ã°
Web ãã£ãã·ã¥ãã€ãºãã³ã°
ãã¹ã¯ãŒããªã»ãããã€ãºãã³ã°
ãµãŒããŒãµã€ãã»ãªã¯ãšã¹ãã»ãã©ãŒãžã§ãª
ã¢ããªã±ãŒã·ã§ã³ã Host ããããŒããæäŸãããå€ãã©ã®ããã«äœ¿çšããŠãããã«ãã£ãŠã¯ãä»ã®ãŠãŒã¶ãŒå ¥åãå®å šã«åŠçãããªãå Žåãšåæ§ã«ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ã SQL ã€ã³ãžã§ã¯ã·ã§ã³ãªã©ã®ä»ã®æ»æãå¯èœã«ããå¯èœæ§ããããŸãããã¡ãã§ã¯ãçã® SQL ã¯ãšãªã§ã¯ Host ããããŒã䜿çšããŠããªããã®ãšä»®å®ããããçŽæ¥çãªæ»æã«ã€ããŠèª¬æããŸãã
1. ãã¹ãããããŒãã€ãºãã³ã°
æãåçŽãªã±ãŒã¹ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ Host ããããŒã®å€ã䜿çšããŠãã©ãã£ãã¯ããªãã€ã¬ã¯ãããå¯èœæ§ããããŸããäŸãã°ãã¢ããªã±ãŒã·ã§ã³ã®ãã°ã€ã³ããŒãžãžã®ãªãã€ã¬ã¯ããªã©ã該åœããŸããã¢ããªã±ãŒã·ã§ã³ã Host ããããŒã䜿çšããŠãªãã€ã¬ã¯ããªã³ã¯ãäœæããå Žåãæ»æè ã¯æ¬¡ã® HTTP ãªã¯ãšã¹ããéä¿¡ã§ããŸãã
GET / HTTP/1.1
Host: www.attackers-domain.example.com
ãããŠã次ã®ããã«æ»æè ãã³ã³ãããŒã«ãããã¡ã€ã³ã«ãªãã€ã¬ã¯ãããã¬ã¹ãã³ã¹ãçæããŸãã
HTTP/1.1 302 Found
...
Location: http://www.attackers-domain.example.com/login.php
ãã®æ»æèªäœã¯ãæšçã®ãŠãŒã¶ãŒã«ãã®ãªã¯ãšã¹ããå®è¡ãããããšãé£ãããããããŸãæå¹ã§ã¯ãããŸãããäžæ¹ã§ããã¹ãããããŒãã€ãºãã³ã°ã¯ä»ã®æ»æãšçµã¿åãããããšã§ããã®æå¹æ§ãé«ããããšãã§ããŸãã
2. Web ãã£ãã·ã¥ãã€ãºãã³ã°
Web ãã£ãã·ã¥ãã€ãºãã³ã°ã¯ãããèªäœã Host ããããŒã®è匱æ§ã§ã¯ãããŸããããåè¿°ã®ãã¹ãããããŒãã€ãºãã³ã°ãæªçšå¯èœã«ããé ä¿¡ã¡ã«ããºã ã§ããããšãã°ãã¢ããªã±ãŒã·ã§ã³ããªãã€ã¬ã¯ããªã³ã¯ãäœæããéã« Host ããããŒã䜿çšããªãå Žå (ããã¯é©å)ã代ããã« X-Host ãªã©ã®ä»£æ¿ããããŒã䜿çšããŠäœæããå ŽåãèããŠã¿ãŸã (ãã¡ãã¯ééã)ããã®ã·ããªãªã§ã¯ãæ»æè ã¯èªåã®ãã¡ã€ã³ã X-Host ã«æ¿å ¥ããŠãªãã€ã¬ã¯ããæ¹ããã§ããŸãããã ãããã®ãªãã€ã¬ã¯ãããŠãŒã¶ãŒã«éä¿¡ããææ®µãå¿ èŠã§ãã
ããã§ãWeb ãã£ãã·ã¥ãã€ãºãã³ã°ã®åºçªã§ããWeb ãã£ãã·ã¥ã¯éåžžããªã¯ãšã¹ãããªãªãžã³ã«éä¿¡ããã®ã§ã¯ãªããHTTP ãªã¯ãšã¹ãã®äžéšããããŒããšããŠäœ¿çšããŠããã£ãã·ã¥ãããã³ã³ãã³ãã䜿çšããã¿ã€ãã³ã°ã倿ããŸãããã®ããŒã«ã¯éåžžãHost ããããŒãå«ãŸãããããŠä»ã®ããããŒãå«ãŸããå ŽåããããŸãããã¡ãã®äŸã§ã¯ãX-Host ããã£ãã·ã¥ããŒã®äžéšã§ã¯ãªãããã¬ã¹ãã³ã¹ã§å®å šã«äœ¿çšãããŠããªãå Žå (ãªãã€ã¬ã¯ãã®äŸã®ããã«)ãæ»æè ã¯ãã£ãã·ã¥ãå©çšããŠä»ã®ãŠãŒã¶ãŒã«æªæã®ãããªãã€ã¬ã¯ããé ä¿¡ããããšãã§ããŸããæ»æè ã¯ãã®åŸãèªåã®ãªã¯ãšã¹ãããã£ãã·ã¥ã«ä¿åããä»ã®ãŠãŒã¶ãŒã«æäŸããæ¹æ³ãèŠã€ããŸãã
Web ãã£ãã·ã¥ãã€ãºãã³ã°ã®äŸãèŠãŠã¿ãŸãããããŸãæ»æè ã¯ãX-Host ããããŒã«æªæã®ãããã¡ã€ã³ãå«ã次ã®ãªã¯ãšã¹ãããã£ãã·ã¥ããŸãããã®ãªã¯ãšã¹ãã¯ãªãã€ã¬ã¯ãã«äœ¿çšãããŸãã
GET / HTTP/1.1
Host: www.super-cool-fun-domain.example.com
X-Host: www.attackers-domain.example.com
æ£åžžãªãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã蚪åããéåžžã®ãªã¯ãšã¹ããéä¿¡ããŸãã
GET / HTTP/1.1
Host: www.super-cool-fun-domain.example.com
X-Host: www.super-cool-fun-domain.example.com
æ»æè ã®ãªã¯ãšã¹ãããã¹ãš Host ããããŒã«åºã¥ããŠãã£ãã·ã¥ãããå Žåãæ£åžžãªãŠãŒã¶ãŒã¯æ±æããããã£ãã·ã¥ã¬ã¹ãã³ã¹ãåãåããæ»æè ã®ããŒãžã«ãªãã€ã¬ã¯ããããŸãã
HTTP/1.1 302 Found
...
Location: http://www.attackers-domain.example.com/login.php
Web ãã£ãã·ã¥ãã€ãºãã³ã°æ»æã¯ããã£ãã·ã¥ããŒãšããŠäœ¿çšãããããããŒãšãã¢ããªã±ãŒã·ã§ã³ãã¬ã¹ãã³ã¹ãçæããããã«äœ¿çšããããããŒãšã®äžäžèŽã«äŸåããŠããŸããäžèšã®äŸã§ã¯ãX-Host ããããŒããã£ãã·ã¥ãããã¬ã¹ãã³ã¹ãæ¹ãããããŠãŒã¶ãŒãå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãæªæã®ãããµã€ãã«ãªãã€ã¬ã¯ãããå¯èœæ§ããããŸããã
3. ãã¹ã¯ãŒããªã»ãããã€ãºãã³ã°
ãã¹ã¯ãŒããªã»ãããã€ãºãã³ã°ã¯ãåè¿°ã®ãã¹ãããããŒãã€ãºãã³ã°ãšéåžžã«é¡äŒŒããŠããŸããè匱ãªã¢ããªã±ãŒã·ã§ã³ã¯ããã¹ã¯ãŒããªã»ããã¯ãŒã¯ãããŒäžã«ãªã¯ãšã¹ãããããŠãŒã¶ãŒã«éä¿¡ãããã¹ã¯ãŒããªã»ãããªã³ã¯ãäœæããããã«ãHost ããããŒã䜿çšããŸããããšãã°ãæ»æè ããaliceããŠãŒã¶ãŒã®ãã¹ã¯ãŒããªã»ãããèŠæ±ãã以äžã® POST ãªã¯ãšã¹ããéä¿¡ãããšä»®å®ããŸãã
POST /password-reset HTTP/1.1
Host: www.attackers-domain.example.com
...
user=alice
ã¢ããªã±ãŒã·ã§ã³ã¯ãHost ããããŒã®å€ã䜿çšããŠãªã»ãããªã³ã¯ãäœæãããã®ãªã³ã¯ãå«ãã¡ãŒã«ã alice ãŠãŒã¶ãŒã«éä¿¡ããŸãã
www.attackers-domain.example.com?reset_token=super-random-reset-token-value-12345
ãŠãŒã¶ãŒããªã³ã¯ãã¯ãªãã¯ãããšãæ»æè ã¯ãªã»ããããŒã¯ã³ãååŸãããŠãŒã¶ãŒã®ãã¹ã¯ãŒããèªèº«ã®å€ã«ãªã»ããããããšãã§ããŸãã
4. ãµãŒããŒãµã€ãã»ãªã¯ãšã¹ãã»ãã©ãŒãžã§ãª
ãµãŒããŒã»ãµã€ãã»ãªã¯ãšã¹ãã»ãã©ãŒãžã§ãª (SSRF) ã¯ãæ»æè ããµãŒããŒãµã€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ä»»æã®å Žæãžã®ãªã¯ãšã¹ããéä¿¡ãããããšãå¯èœã«ããè匱æ§ã§ããHost ããã㌠SSRF ã§ã¯ãæ»æè ã¯ãŠãŒã¶ãŒãšãµãŒããŒãµã€ãã®ã¢ããªã±ãŒã·ã§ã³ã®éã«ããã·ã¹ãã ã®ã«ãŒãã£ã³ã°ãæªçšããŠããŸãããã®ããã«ãŠã§ã¢ (äŸ : Load Balancer) ã Host ããã㌠SSRF ã«å¯ŸããŠè匱ã§ããå Žåãæ»æè ã¯ãããå©çšããŠãéåžžã¯ã¢ã¯ã»ã¹ã§ããªãå éšã·ã¹ãã ãšããåãããããšãå¯èœã§ããããããã¹ãããäžè¬çãªæ¹æ³ã¯ãHost ããããŒã®å€ã«äžæã§ã³ã³ãããŒã«ããããã¡ã€ã³ (äŸ : Portswigger ã® Burp Collaboratorãããã㯠ProjectDiscovery ã® interactsh) ãæå®ããããšã§ããHost ããããŒæ»æäžã«ããã®åºæã®ãã¡ã€ã³ãã¿ãŒã²ããã¢ããªã±ãŒã·ã§ã³ã®ãããã¯ãŒã¯ãã¹ (äŸ : Load Balancer) å ã®ã·ã¹ãã ãã DNS ã«ãã¯ã¢ããããã®ä»ã®ãªã¯ãšã¹ããåãåããšãSSRF ã®è匱æ§ã«ãããããå¯èœæ§ããããŸãããããã®æ»æã¯ãå®éã«ã¯è€éãªåŸåã«ãããã®ã®ãJames Kettle ã®ç ç©¶ã§åŸ¹åºçã«ç€ºãããŠããããã«ã壿» çãªåœ±é¿ãåãŒãããšããããŸãã
HTTP Host ããããŒæ»æã®å®äŸ
Host ããããŒæ»æã®çš®é¡ãçè§£ã§ãããšããã§ãå®éã®äºäŸãèŠãŠãããŸãããã
CVE-2022-29933 : Craft CMS ã«ããããã¹ã¯ãŒããªã»ãããã€ãºãã³ã°
SEC Consult ã®èª¿æ»çµæã«ãããšãCraft CMS ã®ããã©ã«ãã®ã€ã³ã¹ããŒã«ã§ã¯ããã¹ã¯ãŒãåèšå®ã¡ãŒã«ããX-Forwarded-HostãHTTP ããããŒã®å€ã䜿çšããŠäœæããŠããããšãããããŸããããã®äŸã§ã¯ãæ»æè 㯠X-Forwarded-Host ã«èªåã®ã³ã³ãããŒã«ãã¡ã€ã³ãæ¿å ¥ããalice ãŠãŒã¶ãŒã®ãã¹ã¯ãŒããªã»ãããªã³ã¯ã次ã®ããã«æ¹ããããŸãã
POST /index.php?p=admin/actions/users/send-password-reset-email HTTP/1.1
Host: <installation-domain>
X-Forwarded-Host: www.attackers-domain.example.com
...
Cookie: CRAFT_CSRF_TOKEN=[...]
loginName=alice@example.com
alice@example.com ã®ãŠãŒã¶ãŒããã¹ã¯ãŒããªã»ããã¡ãŒã«ãåä¿¡ãããšããã®ã¡ãŒã«ã«ã¯æ»æè ãã³ã³ãããŒã«ãããã¡ã€ã³ãžã®ãªã³ã¯ãå«ãŸããŠããŸãã
http://www.attackers-domain.example.com/index.php?p=admin/set-password&code=<reset-code>&id=<uuid>
ãŠãŒã¶ãŒããªã³ã¯ãã¯ãªãã¯ãããšãæ»æè ã¯ãªã»ããã³ãŒããååŸãããã¹ã¯ãŒãããªã»ããããŠã¢ã«ãŠã³ããä¹ã£åãããšãã§ããŸãã
Slack ã«ããã X-Forwarded-Host ã€ã³ãžã§ã¯ã·ã§ã³ãä»ãããã©ã€ã³ã SSRF
ãã®æ»æã¯ã匱ã X-Forwarded-Host æ€èšŒãåé¿ããfiles.slack.com ã§ã®ãã©ã€ã³ã SSRF ãå®çŸããŸãããŸããfiles.slack.com ã¯åŠçäžã« Host ããããŒããã³ X-Forwarded-Host ããããŒã®æå¹æ§ãæ€èšŒããfiles.slack.com ã§ãªãå Žå㯠HTTP 500 ã¬ã¹ãã³ã¹ã³ãŒããè¿ããŸãããã ããX-Forwarded-Host ã®æ€èšŒã¯ããã¡ã€ã³ã®æ«å°Ÿã« @ ã®æåã远å ããããšã§åé¿å¯èœã§ãããããã£ãŠãæ»æè ã¯ãªã¯ãšã¹ããååŸããããã®ã³ãŒã«ããã¯ãã¡ã€ã³ãèšå®ããŸã (äŸ : Burp CollaboratorãProjectDiscoveryã®interactshã䜿çš)ããããŠã次ã®ãªã¯ãšã¹ãã slack.files.com ã«éä¿¡ããŸãã
GET /<URI> HTTP/1.1
Host: files.slack.com
...
X-Forwarded-Host: files.slack.com@www.unique-attackers-domain.example.com
X-Forwarded-Host ããããŒããäœæããã URL files.slack.com ã¯ãHTTP ãŠãŒã¶ãŒ (HTTP BasicAuth) ãšããŠæ±ãããwww.unique-attackers-domain.example.com ã¯ãã¹ãåãšããŠæ±ãããŸããæ»æè ã¯ããã¯ãšã³ãã·ã¹ãã ãããªã¯ãšã¹ããåä¿¡ããSSRF ãæåããããšã確èªããŸãããããããããã€ãã®ç°ãªããã©ã€ã³ã SSRF ãã¯ããã¯ã䜿çšããŠãæ å ±ãæŒæŽ©ãããããããã¯ãšã³ãã·ã¹ãã ãšçžäºäœçšããããããªã©ãããŸããŸãªããšãå¯èœã«ãªããŸãã
HTTP Host ããããŒæ»æãé²ãæ¹æ³
HTTP Host ããããŒæ»æãé²ãæ¹æ³ã¯è€æ°ååšããŸãããããããã®æå¹æ§ã𿬠ç¹ã¯æ§ã ã§ãã以äžã«ããã®ã¿ã€ãã®æ»æãé²ãããã®å®çšçãªè§£æ±ºçã玹ä»ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§ Host ããããŒã®å€ãšãã®ããªãšãŒã·ã§ã³ã䜿çšããªã
Host ããããŒæ»æãé²ãæãç°¡åãªæ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã§ Host ããããŒå€ã䜿çšããªãããšã§ããããã«ããµãŒããŒåŽã®èšå®ãçžå¯Ÿ URL ã䜿çšããããšã§ãHost ããããŒæ»æãå®å šã«é²åŸ¡ã§ããŸãã
Host ããããŒã®å€ã«å¯ŸããŠå³æ Œãªæ€èšŒã宿œãã
Host ããããŒå€ã䜿çšããå¿ èŠãããå ŽåãHost ããããŒæ»æãé²ãããã«ä»¥äžã®ãã¯ããã¯ã䜿çšããŠãã ããã
Host ããããŒãèš±å¯ãããå€ã®ãªã¹ãã«å«ãŸããŠããããšã確èªããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã3ã€ã®ãã¡ã€ã³ã®ã¿ã䜿çšããå Žåã¯ãHost ããããŒããã®3ã€ã®å€ã®ãã¡1ã€ã ãã§ããããšã確èªããŸãã
Host ããããŒã1ã€ã ãååšããããšã確èªããŸããéè€ãã Host ããããŒã¯ãæ€èšŒãšããããŒã®äœ¿çšã®éã«ãªã¯ãšã¹ãããç°ãªãå€ãååŸãããå Žåãæ€èšŒãåé¿ããããã«äœ¿çšãããããšããããŸãã
Host ããããŒã®ä»£æ¿ãŸãã¯äžæžããšããŠã® X-Host ã X-Forwarded-Host ã®äœ¿çšã¯é¿ããŠãã ããããããåŸãªãå Žåã¯ãHost ããããŒã«å¯ŸããŠæäŸãããŠããã®ãšåãæšå¥šäºé ã«åŸã£ãŠãã ããã
Fastly ã HTTP Host ããããŒæ»æãé²ãä»çµã¿
Fastly ã®ãã£ãã·ã¥ãã€ãºãã³ã°é²æ¢ã¬ã€ãã«åŸãã远å ã®ä¿è·å¯Ÿçãè¬ããããŠããããšã確èªããŠãã ããã
Fastly ã®æ¬¡äžä»£ Web ã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ããå©çšã®å ŽåãHTTP Host ããããŒæ»æã«å¯Ÿããä¿è·æªçœ®ã远å ããŠãç¡å¹ãª Host ããã㌠(äŸ : èš±å¯ããããã¡ã€ã³ãªã¹ãã«ãªããã®) ãæã€ãã¹ãŠã®ãªã¯ãšã¹ãããããã¯ã§ããŸãã
æŠèŠ
Host ããããŒã¯ã€ã³ã¿ãŒããã (ããã³ Fastly) ã®éèŠãªèŠçŽ ã§ãããHost ããããŒãæé»çã«ä¿¡é Œãããããè¿œå æ©èœã«äœ¿çšãããŠããããäžé©åã«èšå®ãããããããšãæ»æè ã¯ãã®åäœãæªçšããŠãç°ãªãçš®é¡ã®æªæã®ããã³ã³ãã³ããæ¿å ¥ããããšãå¯èœã«ãªããŸããããã«ãããHost ããããŒæ»æãWeb ãã£ãã·ã¥æ»æããã¹ã¯ãŒããªã»ããæ»æããµãŒããŒã»ãµã€ãã»ãªã¯ãšã¹ãã»ãã©ãŒãžã§ãª (SSRF) ãªã©ãè€æ°ã®çš®é¡ã®æ»æãå¯èœã«ãªããŸããç§ãã¡ãæŠèª¬ãããœãªã¥ãŒã·ã§ã³ãšããã£ãã·ã¥ãã€ãºãã³ã°ãé²ãããã® Fastly ã®ã¬ã€ãã³ã¹ãçµã¿åãããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ Host ããããŒæ»æã®ããªã¢ã³ããé²ãããšãã§ããŸãã