hacktricks/pentesting-web/h2c-smuggling.md

4.4 KiB

헤더 스머글링 업그레이드

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로**부터 **히어로**로 **AWS 해킹**을 배우세요!

HackTricks를 지원하는 다른 방법:

H2C 스머글링

평문(HTTP2 Over Cleartext) (H2C)

H2C 또는 평문 http2는 표준 HTTP 연결을 지속 연결로 업그레이드하여 일시적인 HTTP 연결의 일반적인 규칙에서 벗어납니다. 이 업그레이드된 연결은 단일 요청 형태의 평문 HTTP 대신 지속적인 통신을 위해 http2 이진 프로토콜을 활용합니다.

스머글링 문제의 핵심은 리버스 프록시의 사용으로 발생합니다. 일반적으로 리버스 프록시는 HTTP 요청을 처리하고 백엔드로 전달하여 그에 대한 응답을 반환합니다. 그러나 HTTP 요청에 Connection: Upgrade 헤더가 포함되어 있는 경우 (웹소켓 연결에서 자주 볼 수 있음), 리버스 프록시는 클라이언트와 서버 사이에 지속적인 연결을 유지하여 특정 프로토콜에서 필요로 하는 지속적인 교환을 용이하게 합니다. H2C 연결의 경우 RFC 준수를 위해 세 가지 특정 헤더가 있어야 합니다:

Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
Connection: Upgrade, HTTP2-Settings

취약한 프록시

취약점은 Upgrade 및 때로는 Connection 헤더를 처리하는 역방향 프록시의 처리 방식에 의존합니다. 다음 프록시는 프록시 패스 중에 이러한 헤더를 기본적으로 전달하여 H2C 스머글링을 활성화합니다:

  • HAProxy
  • Traefik
  • Nuster

반면, 다음 서비스는 프록시 패스 중에 두 헤더를 기본적으로 전달하지 않습니다. 그러나 UpgradeConnection 헤더를 필터링하지 않고 전달할 수 있도록 불안전하게 구성될 수 있습니다:

  • AWS ALB/CLB
  • NGINX
  • Apache
  • Squid
  • Varnish
  • Kong
  • Envoy
  • Apache Traffic Server

이용

준수하는 H2C 연결 업그레이드에 필요한 헤더를 기본적으로 전달하지 않는 서버도 있음을 주의해야 합니다. 따라서 AWS ALB/CLB, NGINX, Apache Traffic Server 등의 서버는 기본적으로 H2C 연결을 차단합니다. 그러나 일부 백엔드가 표준을 준수하지 않을 수 있으므로 Connection: Upgrade 변형을 사용하여 테스트하는 것이 좋습니다.

{% hint style="danger" %} proxy_pass URL에서 지정된 특정 경로에 관계없이 (예: http://backend:9999/socket.io), 설정된 연결은 기본적으로 http://backend:9999로 설정됩니다. 이로 인해 내부 엔드포인트 내의 모든 경로와 상호 작용할 수 있으며 이 기술을 활용할 수 있습니다. 따라서 proxy_pass URL에서 경로를 지정해도 액세스가 제한되지 않습니다. {% endhint %}

BishopFox의 h2csmugglerassetnote의 h2csmuggler 도구는 H2C 연결을 설정하여 프록시가 적용한 보호를 우회하고 프록시에 의해 보호되는 리소스에 액세스할 수 있도록 하는 시도를 용이하게 합니다.

이 취약점에 대한 자세한 정보, 특히 NGINX에 대한 정보는 이 자세한 리소스를 참조하십시오.