HTTP 정원
HTTP Garden은 취약성을 훨씬 쉽게 찾을 수 있는 방식으로 상호 작용하는 스크립트와 함께 구성 가능하도록 구성된 HTTP 서버 및 프록시 모음입니다. HTTP Garden에서 찾을 수 있는 취약점에 대한 멋진 데모를 보려면 ShmooCon 2024 강연을 확인하세요.
감사의 말
이 프로젝트를 가능하게 해준 Galois, Trail of Bits, Narf Industries 및 Dartmouth College의 친구들에게 감사의 말씀을 전하고 싶습니다.
이 자료는 계약 번호 HR0011-19-C-0076에 따라 DARPA(국방고등연구계획국)에서 지원한 작업을 기반으로 합니다.
시작하기
종속성
- HTTP Garden은 x86_64 Linux에서 실행되며 다른 플랫폼에서는 테스트되지 않았습니다.
- 대상 서버는 Docker 컨테이너에서 구축되고 실행되므로 Docker가 필요합니다.
- 또한 PyPI(예:
pip
사용) 또는 시스템 패키지 관리자에서 얻을 수 있는 다음 Python 패키지가 필요합니다.
시스템 패키지 관리자를 사용하여 Python 패키지를 설치하는 경우 시스템에 따라 패키지 이름 앞에 py3-
, python3-
또는 python-
을 붙여야 할 수도 있습니다.
- 또한 패키지 관리자에서 rlwrap을 설치하는 것이 좋습니다. 이렇게 하면 Garden repl이 훨씬 더 재미있어지기 때문입니다.
건물
docker build ./images/http-garden-soil -t http-garden-soil
이 이미지에는 몇 가지 기본 유틸리티와 프로세스를 종료하지 않고 프로세스에서 적용 범위를 수집하는 데 도움이 되는 포크된 AFL++가 포함되어 있습니다.
- 일부 HTTP 서버 및 프록시를 구축하십시오.
docker compose build gunicorn hyper nginx haproxy nginx_proxy
물론 HTTP Garden에는 우리가 방금 구축한 것보다 훨씬 더 많은 대상이 있습니다. 단지 그것들을 모두 구축하는 데 시간이 오래 걸린다는 것입니다. 이 몇 가지를 구축하는 데에도 몇 분이 소요됩니다!
달리기
docker compose up gunicorn hyper nginx haproxy nginx_proxy
rlwrap python3 tools/repl.py
- HAProxy를 통해 기본 GET 요청을 필터링한 다음 Nginx 역방향 프록시를 통해 필터링한 다음 결과를 Gunicorn, Hyper 및 Nginx 원본 서버로 보내고 해석이 일치하는지 표시합니다.
garden> payload 'GET / HTTP/1.1rnHost: whateverrnrn' # Set the payload
garden> transduce haproxy nginx_proxy # Run the payload through the reverse proxies
[1]: 'GET / HTTP/1.1rnHost: whateverrnrn'
haproxy
[2]: 'GET / HTTP/1.1rnhost: whateverrnrn'
nginx_proxy
[3]: 'GET / HTTP/1.1rnHost: echornConnection: closernrn'
garden> servers gunicorn hyper nginx # Select the servers
garden> grid # Show their interpretations
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ ✓
hyper | ✓ ✓
nginx | ✓
모두 동의하는 것 같습니다. 좀 더 흥미로운 페이로드를 시도해 보겠습니다.
garden> payload 'POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0nrn'
garden> grid
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ X
hyper | ✓ X
nginx | ✓
불일치가 있습니다! Nginx는 청크 라인으로 끝나는 라인으로 n
지원하지만 Hyper와 Gunicorn은 지원하지 않기 때문입니다. Nginx는 여기서 기술적으로 RFC 9112를 위반하고 있지만 그 영향은 미미할 것 같습니다.
디렉토리 레이아웃
images
images
디렉토리에는 Garden의 각 HTTP 서버 및 변환기에 대한 하위 디렉토리가 포함되어 있습니다. 각 대상은 자체 Docker 이미지를 갖습니다. 가능한 경우 모든 프로그램은 소스에서 빌드됩니다. 각 대상의 여러 버전을 쉽게 구축할 수 있도록 모든 대상은 저장소 URL( APP_REPO
), 분기 이름( APP_BRANCH
) 및 커밋 해시( APP_VERSION
)로 매개변수화됩니다.
tools
tools
디렉토리에는 서버와 상호 작용하는 데 사용되는 스크립트가 포함되어 있습니다. 그 안에는 당신이 찾을 수 있습니다
-
diagnose_anomalies.py
: 퍼징 중에 무시할 테스트 중인 시스템의 양성 HTTP 구문 분석 문제를 열거하기 위한 스크립트, -
repl.py
: HTTP Garden에 대한 기본 사용자 인터페이스입니다. -
update.py
: docker-compose.yml
의 커밋 해시를 업데이트하는 스크립트입니다. - ...그리고 사용자에게 표시되지 않는 몇 가지 스크립트가 더 있습니다.
대상
HTTP 서버
이름 | 로컬로 실행되나요? | 보장 범위가 수집되었나요? |
---|
아이오http | 예 | 예 |
아파치_httpd | 예 | 예 |
apache_tomcat | 예 | 아니요 |
체루트 | 예 | 예 |
cpp_httplib | 예 | 아니요 |
dart_stdlib | 예 | 아니요 |
eclipse_grizzly | 예 | 아니요 |
eclipse_jetty | 예 | 아니요 |
빠른http | 예 | 아니요 |
go_stdlib | 예 | 아니요 |
총니콘 | 예 | 예 |
h2o | 예 | 예 |
haproxy_fcgi | 예 | 아니요 |
하이퍼 | 예 | 아니요 |
하이퍼콘 | 예 | 예 |
ktor | 예 | 아니요 |
libevent | 예 | 아니요 |
libmicrohttpd | 예 | 아니요 |
libsoup | 예 | 아니요 |
가벼운 | 예 | 예 |
몽구스 | 예 | 예 |
네티 | 예 | 아니요 |
nginx | 예 | 예 |
node_stdlib | 예 | 아니요 |
오픈라이트속도 | 예 | 아니요 |
openwrt_uhttpd | 예 | 예 |
php_stdlib | 예 | 아니요 |
phusion_passenger | 예 | 아니요 |
프로토콜_http1 | 예 | 아니요 |
퓨마 | 예 | 아니요 |
서비스 토크 | 예 | 아니요 |
폭풍 | 예 | 아니요 |
꼬인 | 예 | 아니요 |
일각수 | 예 | 아니요 |
유비콘 | 예 | 예 |
웨이트리스 | 예 | 예 |
웹릭 | 예 | 아니요 |
iis | 아니요 | 아니요 |
openbsd_httpd | 아니요 | 아니요 |
HTTP 변환기
이름 | 로컬로 실행되나요? |
---|
apache_httpd_proxy | 예 |
아파치_트래픽_서버 | 예 |
go_stdlib_proxy | 예 |
h2o_proxy | 예 |
하프록시 | 예 |
haproxy_invalid | 예 |
lighttpd_proxy | 예 |
ngtpx | 예 |
nginx_proxy | 예 |
openlitespeed_proxy | 예 |
핑고라 | 예 |
파운드 | 예 |
오징어 | 예 |
광택 | 예 |
아카마이 | 아니요 |
awselb_classic | 아니요 |
awselb_application | 아니요 |
aws_cloudfront | 아니요 |
클라우드플레어 | 아니요 |
빠르게 | 아니요 |
google_classic | 아니요 |
google_global | 아니요 |
iis_proxy | 아니요 |
openbsd_relayd | 아니요 |
버그
HTTP Garden을 사용하여 발견한 버그는 다음과 같습니다. 자신만의 것을 찾으면 PR을 제출하여 이 목록에 추가하세요! 각 버그는 다음 필드로 설명됩니다.
- 사용 사례: 공격자가 이 버그로 실행할 수 있는 공격 유형
- 요구 사항: 이 버그를 악용하려면 필수 구성 옵션 또는 기타 서버가 필요합니다.
- 위험: 없음|낮음|보통|높음, 간단한 설명이 이어집니다.
- 없음: 버그가 악용될 가능성이 없습니다.
- 낮음: 버그가 악용될 수 있지만 정말 이상한 구성이 필요하거나 본 적이 없는 방식으로 작동하는 프록시에 의존합니다.
- 중간: 버그가 악용될 가능성이 높지만 중간 정도의 영향만 미치거나 가능성이 낮은 서버/변환기 조합이 필요합니다.
- 높음: 일반적인 구성 및 서버/변환기 조합에서 버그가 악용될 수 있습니다.
- 페이로드: 버그를 유발하는 페이로드 예시
- 영향을 받는 프로그램: 보고 및 패치 타임라인과 함께 이 버그가 존재하는 서버 목록입니다. 일부 구현 버그는 일반적이므로 이로 인해 목록이 복잡해지지 않습니다. :)
서버 버그
이는 서버가 요청을 수락하고 해석하는 방식의 버그입니다.
- Python
int
생성자는 청크 크기를 구문 분석하는 데 사용되므로 0x
, _
, +
및 -
가 잘못 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 크기를 가장 긴 유효한 접두사로 해석하지만 있는 그대로 전달하는 변환기.
- 위험도: 중간. 변환기 버그 7을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 1일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- 군니콘:
- 2023년 8월 1일: GH 문제를 통해 보고되었습니다.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 8월 2일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 8월 10일: 커밋에서 수정되었습니다.
-
x00
, r
또는 n
헤더 값에 잘못 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 값에서 이러한 바이트를 전달하거나
n
헤더 라인 종결자로 받아들이고 전달하는 변환기. - 위험: 높음. 변환기 버그 10, 12 및 16을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnHeader: vnx00raluernrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 1일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- 군니콘:
- 2024년 1월 31일: GH 이슈를 통해 보고됨.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 폭풍:
- 2023년 8월 11일: GH 문제를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 헤더 이름 끝에서 공백이 잘못 제거되었습니다.
- 사용 사례: 밀수 요청
- 요구 사항:
:
앞의 공백을 헤더 이름의 일부로 간주하는 변환기. - 위험도: 낮음. 취약한 변환기가 있는지는 모르겠지만 James Kettle은 적어도 하나는 존재한다고 말합니다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnContent-Length : 34rnrnGET / HTTP/1.1rnHost: whateverrnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 2일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- 체루트:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 4일: 수정되지 않은 상태로 유지됩니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 2023년 8월 14일: CVE-2023-40518이 할당되었습니다.
- 첫 번째 헤더 이름의 시작 부분에서 공백이 잘못 제거되었습니다.
- 사용 사례: 밀수 요청
- 요구사항: 첫 번째 헤더 이름 시작 부분의 공백을 헤더 이름의 일부로 간주하는 변환기.
- 위험도: 낮음. 나는 취약한 변환기를 알지 못합니다.
- 페이로드:
GET / HTTP/1.1rntContent-Length: 1rnrnX
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 20일: GH 보안 권고 의견을 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- HTTP 버전은 가장 긴 유효한 접두사로 해석됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET /test HTTP/1.32rnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 14일: GH 이슈 및 PR을 통해 보도됨.
- 2023년 10월 15일: 커밋에서 수정되었습니다.
- HTTP 메서드는 가장 긴 유효한 접두사로 해석됩니다.
- 사용 사례: ACL 우회
- 요구사항: 유효하지 않은 메소드 이름을 있는 그대로 전달하는 변환기.
- 위험도: 중간. 해당 버그가 아직 보고되지 않아 설명을 생략합니다.
- 페이로드:
G=":<>(e),[T];?" /get HTTP/1.1rnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 14일: GH 이슈 및 PR을 통해 보도됨.
- 2023년 10월 15일: 커밋에서 수정되었습니다.
- URI는 전혀 검증되지 않습니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET ! HTTP/1.1rnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 16일: GH 이슈를 통해 보고되었습니다.
- 2023년 10월 16일: PR에서 수정되었습니다.
- 일부 비ASCII 바이트가 헤더 이름에 잘못 허용됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/1.1rnxefoo: barrnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 17일: PR을 통해 보고됨.
- 2023년 10월 18일: 위 PR의 병합을 통해 수정되었습니다.
- 다프네:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 10일: 커밋에서 수정되었습니다.
- 몽구스:
- 2023년 10월 13일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 5일: 커밋에서 수정되었습니다.
- 요청 줄에서 공백을 구분하는 데
n
허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: HTTP/0.9 요청을 있는 그대로
n
전달하고 기본 연결을 재사용하는 변환기. - 위험도: 낮음. 나는 취약한 변환기를 알지 못합니다.
- 페이로드:
GET /nHTTP/1.1rnrn
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 17일: PR을 통해 보고됨.
- 2023년 10월 18일: 병합을 통해 수정되었습니다.
- Python
int
생성자는 Content-Length
값을 구문 분석하는 데 사용되므로 _
, +
및 -
잘못 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
Content-Length
값을 가장 긴 유효한 접두사로 해석하지만 있는 그대로 전달하는 변환기. - 위험도: 낮음. 취약한 변환기가 있는지는 모르겠지만 Matt Grenfeldt는 적어도 하나는 존재한다고 말합니다.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: +1_0rnrn0123456789
- 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 1일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- CPython http.서버:
- 2023년 4월 2일: GH 문제를 통해 보고되었습니다.
- 2023년 4월 2일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 8월 2일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 8월 10일: 커밋에서 수정되었습니다.
- 작업:
- 2023년 6월 1일: GH 문제를 통해 보고되었습니다.
- 2023년 6월 7일: 커밋 88c5c78에서 수정되었습니다.
- 여러 개의
Transfer-Encoding: chunked
헤더가 포함된 요청은 허용되며 메시지 본문이 없는 것으로 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 여러
Transfer-Encoding
헤더가 포함된 요청을 전달하는 변환기. - 위험: 높음. 변환기 버그 28을 참조하십시오.
- 페이로드:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnTransfer-Encoding: chunkedrnrn1rnZrn0rnrn
- 영향을 받는 프로그램:
- 폭풍:
- 2023년 10월 7일: GH 보안 권고를 통해 보고되었습니다.
- 2024년 6월 6일: 보안 권고 릴리스에서 수정되었습니다.
-
xa0
및 x85
헤더 값의 시작과 끝에서 제거됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 알 수 없는
Transfer-Encoding
값을 전달하고 이를 chunked
와 구별되는 것으로 처리하는 변환기. - 위험도: 중간. 변환기 버그 18을 참조하십시오.
- 페이로드:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: xa0chunkedxa0rnrn0rnrn
- 영향을 받는 프로그램:
- 폭풍:
- 2024년 2월 4일: GH 보안 권고 의견을 통해 보고되었습니다.
- 2024년 2월 4일: 수정되지 않은 상태로 유지됩니다.
-
r
헤더 필드 줄에서 줄 종결자로 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 이름에
r
전달하는 변환기. - 위험: 높음. 변환기 버그 10을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnVisible: :/rSmuggled: :)rnrn
- 영향을 받는 프로그램:
- CPython http.서버:
- 2024년 1월 31일: GH 이슈를 통해 보고됨.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 몽구스:
- 2023년 7월 7일: GH 문제를 통해 보고되었습니다.
- 2023년 7월 9일: 커밋 6957c37에서 수정되었습니다.
- 허용되지 않는 ASCII 문자가 헤더 이름에 잘못 허용됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/1.1rnx00x01x02x03x04x05x06x07x08tx0bx0cx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f "(),/;<=>?@[/]{}: whateverrnrn
- 영향을 받는 프로그램:
- 다프네:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 10일: 커밋에서 수정되었습니다.
- 몽구스:
- 2023년 10월 13일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 5일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 8월 11일: GH 문제를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다. OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- HTTP 버전은 검증되지 않습니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/rr1.1rnrn
- 영향을 받는 프로그램:
- 빠른HTTP:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 11일: 커밋에서 수정되었습니다.
- 빈
Content-Length
값은 0
인 것처럼 처리됩니다.
- 사용 사례: 밀수 요청
- 요구사항: 빈
Content-Length
값을 0이 아닌 값으로 해석하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnContent-Length: rnrn
- 영향을 받는 프로그램:
- 인터넷/http로 이동:
- 2023년 7월 31일: GH 이슈를 통해 보고됨
- 2023년 8월 11일: 커밋에서 수정되었습니다.
- 빛tpd:
- 2023년 8월 1일: Issue Tracker를 통해 보고되었습니다.
- 2023년 8월 3일: 커밋에서 수정되었습니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 빈 청크 크기는
0
인 것처럼 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 간에 추가
rn
을 허용하고 전달하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnrnrn
- 영향을 받는 프로그램:
- 인터넷/http로 이동:
- 2023년 12월 2일: GH 이슈를 통해 보고됨.
- 2024년 1월 4일: 커밋에서 수정되었습니다.
- 하이퍼:
- 2023년 12월 1일: 이메일을 통해 보고되었습니다.
- 2023년 12월 18일: 커밋에서 수정되었습니다.
- 몽구스:
- 2024년 1월 3일: GH 이슈를 통해 보고됨.
- 2024년 1월 3일: PR에서 수정되었습니다.
- 빈 헤더 이름이 잘못 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
rn:rn
받아들이고 전달하며 이를 헤더 블록의 끝으로 처리하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rn: ignoredrnHost: whateverrnrn
- 영향을 받는 프로그램:
- 인터넷/http로 이동:
- 2024년 1월 24일: GH 이슈를 통해 보고됨.
- 2024년 1월 30일: 커밋에서 수정되었습니다.
- 군니콘:
- 2023년 12월 4일: GH 이슈를 통해 보고됨.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
- Node.js:
- 2023년 10월 13일: GH 이슈를 통해 보고되었습니다.
- 2023년 10월 17일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 10월 13일: GH 이슈 댓글을 통해 보고되었습니다.
- 2023년 10월 15일: 수정되지 않은 상태로 유지됩니다.
-
rn
공백이 아닌 모든 시퀀스는 헤더 값의 시작 부분( :
뒤)에서 제거됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 필드 라인의 베어
n
라인 엔딩을 받아들이고 전달하는 변환기. - 위험도: 중간. 변환기 버그 16을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnUseless:nnGET / HTTP/1.1rnrn
- 영향을 받는 프로그램:
- 군니콘:
- 2023년 6월 2일: 이메일을 통해 보고되었습니다.
- 2024년 1월 31일: GH 이슈를 통해 보고됨.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
-
xa0
및 x85
바이트는 :
앞의 헤더 이름 끝에서 제거됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 이름에서
xa0
또는 x85
허용하고 전달하는 변환기. - 위험: 중간. 변환기 버그 6을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Lengthx85: 10rnrn0123456789
- 영향을 받는 프로그램:
- 건니콘:
- 2023년 6월 27일: 이메일을 통해 보고되었습니다.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
-
,chunked
chunked
와는 다른 인코딩으로 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
,chunked
Transfer-Encoding
값을 있는 그대로 전달하고 이를 chunked
값과 동일하게 해석하는 변환기. - 위험: 높음. 변환기 버그 9를 참조하세요.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- 영향을 받는 프로그램:
- 건니콘:
- 2023년 11월 6일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
- 몽구스:
- 2023년 11월 6일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 1일: 커밋에서 수정되었습니다.
- 승객:
- 2023년 11월 6일: 이메일을 통해 보고되었습니다.
- 2024년 1월 22일: 릴리스에서 수정되었습니다.
- 잘못된 청크 크기는 가장 긴 유효한 접두사로 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 접두사가 잘못된 청크 크기(예: 접두사
0x
)를 허용하고 전달하는 변환기. - 위험: 높음. 변환기 버그 2 및 19를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 영향을 받는 프로그램:
- H2O:
- 2023년 8월 1일: 이메일을 통해 보고되었습니다.
- 2023년 12월 12일: PR에서 수정되었습니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 웹릭:
- 2023년 11월 9일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 3일: PR에서 수정되었습니다.
- 여러 개의 충돌하는
Content-Length
헤더가 있는 요청이 수락되어 첫 번째 헤더의 우선순위가 높아집니다.
- 사용 사례: 밀수 요청
- 요구 사항: 2개의
Content-Length
헤더가 있는 요청을 수락하고 전달하며 마지막 헤더의 우선 순위를 지정하는 변환기. - 위험도: 중간. 변환기 버그 22를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: 1rnContent-Length: 0rnrnZ
- 영향을 받는 프로그램:
- H2O:
- 2023년 11월 30일: 이메일을 통해 보고되었습니다.
- 2024년 7월 10일: GH 문제를 통해 보고되었습니다.
- 2024년 7월 10일: 수정되지 않은 상태로 유지됩니다.
- OpenLite속도:
- 2024년 6월 26일: GH 이슈를 통해 보고되었습니다.
- 2024년 7월 10일: 수정되지 않은 상태로 유지됩니다.
- HTTP 버전 번호의 8비트 정수 오버플로입니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/4294967295.255rnrn
- 영향을 받는 프로그램:
- 라이브벤트:
- 2024년 1월 17일: PR을 제출했습니다.
- 2024년 1월 18일: 병합에서 수정되었습니다.
- 청크 크기는
strtoll(,,16)
사용하여 구문 분석되므로 0x
, +
및 -
접두사가 잘못 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 크기를 가장 긴 유효한 접두사로 해석하지만 있는 그대로 전달하는 변환기.
- 위험도: 중간. 변환기 버그 2를 참조하세요.
- 페이로드:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn
- 영향을 받는 프로그램:
- 라이브벤트:
- 2024년 1월 18일: PR 제출.
- 2024년 2월 18일: 병합에서 수정되었습니다.
- OpenLite속도:
- 2023년 8월 2일: 이메일을 통해 보고되었습니다.
- 2023년 8월 11일: OLS 1.7.18에서 수정되었습니다.
- 부정적인
Content-Length
헤더를 사용하여 서버를 무한 통화 루프에 빠뜨릴 수 있습니다.
- 사용 사례: DoS
- 요구 사항: 없음.
- 위험: 높음. 이 버그는 악용하기가 쉽지 않습니다.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: -48rnrn
- 영향을 받는 프로그램:
- 몽구스:
- 2023년 4월 27일: 이메일을 통해 보고되었습니다.
- 2023년 5월 16~18일: 커밋 4663090, 926959a 및 2669991에서 수정되었습니다.
- CVE-2023-34188이 할당되었습니다.
- 이름이나 값이 없는 헤더를 수신하면 HTTP 헤더 블록이 잘립니다.
- 사용 사례: 밀수 요청
- 요구사항: 빈 헤더 이름을 전달하는 변환기.
- 위험도: 중간. 보너스 보너스 버그 2를 참조하세요.
- 페이로드:
GET / HTTP/1.1rn:rnI: am chopped offrnrn
- 영향을 받는 프로그램:
- 몽구스:
- 2023년 6월 26일: GH 이슈를 통해 보고되었습니다.
- 2023년 6월 29일: 커밋 415bbf2에서 수정되었습니다.
- 헤더 이름은 공백만으로 값과 분리될 수 있습니다. 아니요
:
필수입니다.
- 사용 사례: 밀수 요청
- 요구사항:
:
을 포함하지 않는 헤더 라인을 전달하는 변환기. - 위험도: 중간. 변환기 버그 14를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnContent-Length 10rnrn0123456789
- 영향을 받는 프로그램:
- 몽구스:
- 2023년 7월 7일: GH 문제를 통해 보고되었습니다.
- 2023년 7월 7일: 커밋 5dff282에서 수정되었습니다.
- 잘못된
Content-Length
헤더는 가장 긴 유효한 접두사와 동일하게 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 잘못된 접두사(예:
0x
또는 +
)가 포함된 Content-Length
값을 전달하는 변환기 - 위험: 높음. 변환기 버그 1을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnContent-Length: 1ZrnrnZ
- 영향을 받는 프로그램:
- 몽구스:
- 2023년 7월 31일: GH 이슈를 통해 보고됨
- 2023년 8월 17일: 커밋에서 수정되었습니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 헤더 블록은
rnrX
에서 잘못 종료될 수 있습니다. 여기서 X
임의의 바이트일 수 있습니다.
- 사용 사례: ???
- 요구 사항:
r
로 시작하는 헤더 이름을 전달하거나 r
줄 접기 줄 시작 공백으로 허용하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: arnrZGET /evil: HTTP/1.1rnHost: arnrn
- 영향을 받는 프로그램:
- Node.js:
- 2023년 7월 7일: HackerOne 보고서를 통해 보고되었습니다.
- 2023년 7월 31일: llhttp 커밋에서 수정되었습니다.
- 2023년 9월 16일: 노드 커밋에서 수정되었습니다.
- 청크 라인이
rX
에서 잘못 종료되었습니다. 여기서 X
임의의 바이트일 수 있습니다.
- 사용 사례: 밀수를 요청합니다.
- 요구 사항: Chunk-ext의 선택적 공백 내에서
r
전달하는 변환기. - 위험: 높음. 변환기 버그 3을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn5rr;ABCDrn34rnErn0rnrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn
- 영향을 받는 프로그램:
- Node.js:
- 2023년 7월 9일: HackerOne 댓글을 통해 보고되었습니다.
- 2023년 7월 31일: llhttp 커밋에서 수정되었습니다.
- 2023년 9월 16일: 노드 커밋에서 수정되었습니다.
-
Content-Length
헤더는 strtoll(,,0)
으로 해석되므로 선행 0
, +
, -
및 0x
잘못 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 표준에서 허용하는
Content-Length
값에서 선행 0
을 전달하는 변환기. - 위험: 높음. 이는 표준을 준수하는 변환기에 대해 악용될 수 있습니다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnContent-Length: 010rnrn01234567
- 영향을 받는 프로그램:
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 여러 개의 충돌하는
Content-Length
헤더가 있는 요청이 허용되며 마지막 헤더가 우선적으로 적용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 2개의
Content-Length
헤더가 있는 요청을 수락하고 전달하는 변환기. 첫 번째 우선 순위를 지정합니다. - 위험도: 낮음. 나는 그러한 변환기에 대해 알지 못하지만, 그러한 변환기가 존재할 가능성이 매우 높아 보입니다.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 1rnrnZ
- 영향을 받는 프로그램:
- 빠른HTTP:
- 2024년 2월 4일: 이메일을 통해 신고되었습니다.
- 2024년 2월 11일: 커밋에서 수정되었습니다.
- 헤더 값에는
r
허용됩니다.
- 사용 사례: ???
- 요구 사항: 헤더 값의
r
잘못 해석하고 전달하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnHeader: varluernrn
- 영향을 받는 프로그램:
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 헤더 값은
x00
에서 잘립니다.
- 사용 사례: ACL 우회
- 요구사항: 헤더 값에서
x00
전달하는 변환기. - 위험도: 중간. 변환기 버그 12를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnTest: testx00THESE BYTES GET DROPPEDrnConnection: closernrn
- 영향을 받는 프로그램:
- OpenLite속도:
- 2023년 11월 3일: 이메일을 통해 보고되었습니다.
- 2024년 7월 10일: 이 날짜 또는 그 이전에 수정되었습니다.
- 라이브벤트:
- 2024년 1월 29일: GH 보안 권고를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 캐리지 리턴은 청크 확장의 세미콜론 뒤의 선택적 공백 내에서 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 이 위치에서
rr
rn
과 동일하게 처리하는 서버. - 위험: 높음. 서버 버그 31을 참조하세요.
- 페이로드:
POST /abc HTTP/1.1rnTransfer-Encoding: chunkedrnHost: h2o.http-garden.usrnrn41;a=brrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXrn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 412rnrn0rnrnGET /def HTTP/1.1rnHost: h2o.http-garden.usrnrn
- 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 12월 3일: 이메일을 통해 보고되었습니다.
- 2024년 7월 10일: 이 날짜 또는 그 이전에 수정되었습니다.
- 헤더 이름은 여러 줄에 걸쳐 계속될 수 있습니다.
- 사용 사례: 밀수를 요청합니다.
- 요구사항:
:
을 포함하지 않는 헤더 라인을 전달하는 변환기. - 위험도: 중간. 변환기 버그 14를 참조하십시오.
- 페이로드:
POST / HTTP/1.1rnHost: whateverrnTransfer-rnEncoding: chunkedrnContent-Length: 5rnrn0rnrn
- 영향을 받는 프로그램:
- 승객:
- 2023년 11월 6일: 이메일을 통해 보고되었습니다.
- 2024년 1월 22일: 릴리스에서 수정되었습니다.
- 요청의 빈
Content-Length
'시간 초과가 발생할 때까지 읽기'로 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 빈
Content-Length
헤더 값을 수락 및 전달하고 이를 0과 동일하게 처리하는 변환기. - 위험도: 중간. 변환기 버그 5 및 11을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: localhostrnContent-Length: rnrnGET / HTTP/1.1rnHost: localhostrnrn
- 영향을 받는 프로그램:
- 퓨마:
- 2023년 6월 16일: 이메일을 통해 보고되었습니다.
- 2023년 8월 17일: Puma 6.3.1 및 5.6.7에서 수정되었습니다. 권고를 참조하세요.
- 청크된 메시지 본문은
rnXX
에서 종료됩니다. 여기서 XX
임의의 2바이트일 수 있습니다.
- 사용 사례: 밀수 요청
- 요구 사항: 트레일러 필드를 유지하고 트레일러 필드 내의
:
와 값 사이에 공백을 추가하지 않는 변환기. (ATS는 그러한 서버 중 하나입니다) - 위험: 높음. 이 버그를 악용하기 위한 요구 사항에서는 변환기가 표준을 위반할 것을 요구하지 않습니다.
- 페이로드:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn0rnX:POST / HTTP/1.1rnrn
- 영향을 받는 프로그램:
- 퓨마:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 17일: Puma 6.3.1 및 5.6.7에서 수정되었습니다. 권고를 참조하세요.
- CVE-2023-40175가 할당되었습니다.
- HTTP 메서드와 버전은 검증되지 않습니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음.
- 페이로드:
x00 / HTTP/............0596.7407.rnrn
- 영향을 받는 프로그램:
- 웨이트리스:
- 2023년 10월 17일: PR을 제출했습니다.
- 2024년 2월 4일: PR 병합 문제가 수정되었습니다.
-
xa0
및 x85
Transfer-Encoding
헤더를 제외하고 헤더 값의 시작과 끝에서 제거됩니다.
- 사용 사례: 헤더 값 ACL 우회
- 요구 사항:
xa0
및 x85
제자리에서 받아들이고 전달하는 변환기. - 위험도: 중간. 표준을 통해 변환기는 헤더 값에 obs-text를 전달할 수 있습니다.
- 페이로드:
GET /login HTTP/1.1rnHost: arnUser: x85adminxa0rnrn
- 영향을 받는 프로그램:
- 웨이트리스:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 4일: 커밋에서 수정되었습니다.
- 빈
Content-Length
값은 0
과 동일하게 해석되며 후속 Content-Length
값보다 우선순위가 높습니다.
- 사용 사례: 밀수 요청
- 요구 사항: 비어 있지 않은 Content-Length 값보다 먼저 빈
Content-Length
값을 전달하고 비어 있지 않은 값을 해석하는 변환기. - 위험: 높음. 변환기 버그 11을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnContent-Length: rnContent-Length: 43rnrnPOST /evil HTTP/1.1rnContent-Length: 18rnrnGET / HTTP/1.1rnrn
- 영향을 받는 프로그램:
- 웹릭:
- 2023년 8월 14일: GH 문제를 통해 보고되었습니다.
- 2023년 8월 15일: PR에서 수정되었습니다.
-
x00
헤더 값의 끝에서 제거됩니다.
- 사용 사례: ACL 우회
- 요구사항: 헤더 값에서
x00
전달하는 변환기. - 위험도: 중간. 변환기 버그 12를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnEvil: evilx00rnrn
- 영향을 받는 프로그램:
- 웹릭:
- 2023년 11월 30일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 3일, 2024년: PR에서 수정되었습니다.
- 알 수 없는 모든 전송 코딩은
chunked
과 동일하게 처리됩니다.
- 사용 사례: 밀수 요청
- 요구사항:
identity
및 chunked
이외의 전송 인코딩을 전달하는 변환기. 이는 표준에 의해 허용됩니다. - 위험: 높음. 이는 일부 표준 호환 변환기에 대한 요청 밀수를 허용합니다.
- 페이로드:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: bleghrnrn1rnZrn0rnrn
- 영향을 받는 프로그램:
- 빠른HTTP:
- 2024년 2월 4일: 이메일을 통해 신고되었습니다.
- 2024년 2월 11일: 커밋에서 수정되었습니다.
- 유효한 요청 이후 잘못된 요청이 파이프라인되면 연결이 조기에 닫힙니다.
- 사용 사례: ???
- 요구 사항: 없음.
- 위험: 없음.
- 페이로드:
GET / HTTP/1.1rnConnection: closernrnInvalidrnrn
- 영향을 받는 프로그램:
- 몽구스:
- 2024년 1월 29일: GH 이슈를 통해 보고됨.
- 2024년 2월 13일: 커밋에서 수정되었습니다.
- 유비콘:
- 2024년 1월 29일: GH 토론 댓글을 통해 보고되었습니다.
- 2024년 2월 6일: 커밋에서 실수로 수정되었습니다.
-
x80
보다 큰 바이트는 헤더 값의 시작과 끝에서 제거됩니다.
- 사용 사례: 문제가 많습니다.
- 요구 사항:
x80
보다 큰 바이트가 포함된 호스트 헤더를 전달하는 변환기. - 위험도: 중간.
- 페이로드:
POST / HTTP/1.1rnHost: xffaxffrnTransfer-Encoding: xffchunkedxffrnrn1rnZrn0rnrn
- 영향을 받는 프로그램:
- 혈액 요소 질소:
- 2024년 2월 13일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 13일: 수정되지 않은 상태로 유지됩니다.
- 잘못된 청크가 수신되면 연결이 닫히지 않고 다음 메시지의 시작은 잘못된 청크 다음의 첫 번째
rn
뒤에 배치됩니다.
- 사용 사례: 응답 큐 중독.
- 요구 사항: 유효하지 않은 청크를 전달하는 변환기.
- 위험도: 중간.
- 페이로드:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnINVALID!!!rnGET / HTTP/1.1rnHost: whateverrnrn
- 영향을 받는 프로그램:
- 체루트:
- 2024년 2월 14일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 14일: 수정되지 않은 상태로 유지됩니다.
- 초기 요청 버퍼의 파이프라인 요청은
Content-Length: 0
헤더가 있더라도 버퍼에 있는 첫 번째 요청의 메시지 본문으로 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 들어오는 스트림 요소 경계를 변경하지 않는 변환기.
- 위험도: 낮음. 나는 그런 변환기를 모른다
- 페이로드:
POST / HTTP/1.1rnContent-Length: 0rnConnection:keep-alivernHost: arnid: 0rnrnPOST / HTTP/1.1rnHost: arnid: 1rnContent-Length: 34rnrn
GET / HTTP/1.1rnHost: arnid: 2rnrn
- 영향을 받는 프로그램:
- 퓨마:
- 2024년 2월 2일: 이메일을 통해 신고되었습니다.
- 2024년 2월 2일: 커밋에서 수정되었습니다.
변환기 버그
이는 변환기가 요청을 해석, 정규화 및 전달하는 방식의 버그입니다.
-
0x
접두사가 붙은 Content-Length
값은 메시지 본문의 유효성 검사 없이 잘못 승인 및 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
Content-Length
가장 긴 유효한 접두사로 해석하거나 0x
접두사가 붙은 Content-Length
해석하는 서버. - 위험도: 중간. 서버 버그 10, 29, 32를 참조하세요.
- 페이로드:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnContent-Length: 0x10rnrnZ
- 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 9월 7일: 이메일을 통해 신고되었습니다.
- 2023년 11월 27일: 이메일을 통해 수정 사항을 알렸습니다.
- 잘못된 청크 크기 값이 잘못 승인되고 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: HTTP/1.1 백엔드 서버
- 위험: 높음. 이 버그는 임의의 백엔드에 대한 요청 밀수에 악용될 수 있었습니다.
- 페이로드:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnTransfer-Encoding: chunkedrnrnZrnZZrnZZZrnrn
- 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 9월 7일: 이메일을 통해 신고되었습니다.
- 2023년 11월 27일: 이메일을 통해 수정 사항을 알렸습니다.
-
r
;
.
- 사용 사례: 밀수 요청
- 요구 사항: 이 위치에서
r
잘못 해석하는 서버. - 위험: 높음. 서버 버그 31을 참조하세요.
- 페이로드:
POST / HTTP/1.1rnHost: server.my-domain.coolrnTransfer-Encoding: chunkedrnrn2rr;arn02rn41rn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 430rnrn0rnrnGET / HTTP/1.1rnHost: server.my-domain.coolrnrn
- 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 9월 7일: 이메일을 통해 신고되었습니다.
- 2023년 11월 27일: 이메일을 통해 수정 사항을 알렸습니다.
- Apache 트래픽 서버:
- 2023년 9월 20일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 13일: PR에서 수정되었습니다.
- Google Cloud 기본 애플리케이션 부하 분산기:
- 2023년 9월 13일: Google IssueTracker를 통해 보고되었습니다.
- 2024년 1월 30일: 이 날짜 또는 그 이전에 수정되었습니다.
- 잘못된 청크가 포함된 메시지는 메시지 본문 없이 전달됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음.
- 페이로드:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1r0n
- 영향을 받는 프로그램:
- 파운드:
- 2024년 6월 13일: GH 문제를 통해 보고되었습니다.
- 2024년 6월 14일: 커밋에서 수정되었습니다.
- 빈
Content-Length
헤더가 잘못 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 빈
Content-Length
값을 0이 아닌 것으로 해석하는 서버 - 위험도: 중간. 서버 버그 38을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnhost: whateverrncontent-length: rnrn
- 영향을 받는 프로그램:
- Apache 트래픽 서버:
- 2023년 8월 2일: GH 이슈를 통해 보고되었습니다.
- 2023년 8월 6일: PR을 통해 수정되었습니다.
- 허용되지 않는 바이트는 헤더 이름 내에서 허용 및 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 이름 내에서 이러한 잘못된 바이트를 잘못 해석하는 서버.
- 위험: 중간. 서버 버그 41을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnHost: fanoutrnHeaderx85: valuernrn
- 영향을 받는 프로그램:
- Apache 트래픽 서버:
- 2023년 6월 29일: 이메일을 통해 보고되었습니다.
- 2023년 9월 18일: GH 이슈를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- OpenBSD 중계:
- 2023년 11월 10일: 이메일을 통해 보고되었습니다.
- 2023년 11월 28일: 커밋에 패치가 적용되었습니다.
- 청크 크기는 가장 긴 유효한 접두사로 해석되어 다시 방출됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 크기의
0_
또는 0x
접두사를 해석하는 서버. - 위험: 높음. 서버 버그 1, 25 및 변환기 버그 19를 참조하세요.
- 페이로드 :
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1these-bytes-never-get-validatedrnZrn0rnrn
- 영향을받는 프로그램 :
- 아파치 트래픽 서버 :
- 2023 년 10 월 10 일 : GH 문제를 통해보고되었습니다.
- 2024 년 2 월 13 일 : Pr.
- 자리 표시 자 :)
-
Transfer-Encoding: ,chunked
헤더는 손상되지 않은 상태로 전달되며 chunked
와 동등한 것으로 해석됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 알 수없는
Transfer-Encoding
S를 무시하고 chunked
것과는 ,chunked
되는 처리를 무시하는 서버. - 위험 : 높음. 서버 버그 21을 참조하십시오.
- 페이로드 :
POST / HTTP/1.1rnHost: arnTransfer-Encoding: ,chunkedrnrn0rnrn
- 영향을받는 프로그램 :
- Azure CDN :
- 2023 년 10 월 15 일 : MSRC 취약성 보고서를 통해보고되었습니다.
- 2023 년 11 월 29 일 :이 날짜 또는 그 이전에 수정되었습니다.
- 2023 년 12 월 12 일 : "이 사건은 HTTP 밀수가 취약성을 고려하지 않기 때문에 MSRC의 서비스에 대한 기준을 충족시키지 못하며이 사건을 마감 할 것입니다."
- nghttpx :
- 2023 년 10 월 14 일 : 이메일을 통해보고되었습니다.
- 2023 년 10 월 17 일 : Pr.
-
r
헤더 값으로 잘못 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
r
헤더 필드 내에서 rn
에 해당하는 서버. - 위험 : 중간. 서버 버그 13을 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnInvalid-Header: thisrvaluerisrinvalidrnrn
- Google Class Classic Application Load Balancer :
- 2023 년 9 월 7 일 : Google IssueTracker를 통해보고했습니다.
- 2024 년 1 월 30 일 :이 날짜 또는 그 이전에 수정되었습니다.
- 빈
Content-Length
헤더가 먼저 오는 한 비어있는 Content-Length
헤더가 다른 Content-Length
헤더가있는 경우에도 잘못 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 빈
Content-Length
값을 0으로 해석하고 들어오는 요청에서 여러 Content-Length
헤더를 수락하는 서버. 첫 번째 우선 순위. - 위험 : 중간. 서버 버그 42를 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnhost: whateverrncontent-length: rncontent-length: 59rnrnPOST /evil HTTP/1.1rnhost: whateverrncontent-length: 34rnrnGET / HTTP/1.1rnhost: whateverrnrn
- 영향을받는 프로그램 :
- Haproxy :
- 2023 년 8 월 2 일 : GH 문제를 통해보고되었습니다.
- 2023 년 8 월 9 일 : Commit에서 고정.
- 2023 년 8 월 10 일 : CVE-2023-40225 할당.
-
x00
헤더 값으로 전달됩니다.
- 유스 케이스 : ACL 바이 패스
- 요구 사항 :
x00
에서 헤더 값을 자르는 서버. - 위험 : 중간. 서버 버그 35 및 43 및 트랜스 듀서 버그 20을 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnHost: google.comx00.kallus.orgrnrn
- 영향을받는 프로그램 :
- Haproxy :
- 2023 년 9 월 19 일 : 이메일을 통해보고되었습니다.
- 2024 년 1 월 31 일 : Commit에서 고정.
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
- Bare
n
청크 라인 터미네이터로 허용됩니다.
- 유스 케이스 : ???
- 요구 사항 : N/A
- 위험 : 없음
- 페이로드 :
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn
- 영향을받는 프로그램 :
- Haproxy :
- 2024 년 1 월 25 일 : 이메일을 통해보고되었습니다.
- 2024 년 1 월 30 일 : Commmits 7B737DA 및 4837E99에서 고정.
- 아니오가있는 필드 라인
:
as-is는 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 헤더 필드 라인을
:
해석하는 백엔드 서버. - 위험 : 중간. 트랜스 듀서 버그 28 및 37을 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn
- 영향을받는 프로그램 :
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
-
Transfer-Encoding
값이 인식되지 않은 경우 Content-Length
및 Transfer-Encoding
헤더를 모두 포함하는 요청이 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
Content-Length
보다 Transfer-Encoding
우선 순위로 취급하고 ,chunked
chunked
되는 백엔드 서버. 이러한 행동은 표준에 의해 허용됩니다. - 위험 : 높음. 이를 통해 표준 호환 서버에 밀수를 할 수 있습니다.
- 페이로드 :
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnConnection: closernrn0rnrn
- 영향을받는 프로그램 :
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
- 파운드:
- 2024 년 2 월 4 일 : GH 문제를 통해보고되었습니다.
- 2024 년 3 월 29 일 : Commit에서 고정.
-
n
전달 된 메시지에서 rn
으로 정규화되지 않습니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
n
헤더 라인에서 끝나는 줄로 해석하지 않는 백엔드 서버. 표준을 통해 서버는 n
으로 변환 할 수 있습니다
. - 위험 : 높음. 이 버그는 표준 호환 서버에 대해 이용 가능합니다.
- 페이로드 :
GET / HTTP/1.1nHost: whatevernConnection: closenn
- 영향을받는 프로그램 :
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 1 월 31 일 : 픽스되지 않은 상태로 남아 있습니다.
- 터미네이터 청크가
Content-Length
로 Transfer-Encoding
헤더를 교체하지 않고 chunk가 묻지 않기 전에 추가 rn
포함하는 청크 메시지 본체.
- 사용 사례 : 밀수 요청
- 요구 사항 : 없음.
- 위험 : 높음. 이 버그는 임의의 백엔드 서버에 대해 악용 가능합니다.
- 페이로드 :
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn17rn0rnrnGET / HTTP/1.1rnrnrnrn0rnrn
- 영향을받는 프로그램 :
- OpenLitespeed
- 2023 년 11 월 30 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
-
Transfer-Encoding: ,chunked
헤더는 손상되지 않으며 chunked
와 동등한 것으로 해석되지 않습니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 해석하는 서버는
chunked
와 동일하게 ,chunked
되며 표준은 당신이 할 수 있다고 말합니다. - 위험 : 높음. 이것은 표준 호환 백엔드에 대해 사용할 수있는 요청 밀수 취약성입니다.
- 페이로드 :
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn
- 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 10 일 : 이메일을 통해보고되었습니다.
- 2023 년 11 월 28 일 : Commit에서 패치.
-
+
, -
및 0x
접두사가있는 청크 크기는 해석 및 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 청크 크기를 가장 긴 유효한 접두사로 해석하는 서버.
- 위험 : 높음. 서버 버그 22를 참조하십시오.
- 페이로드 :
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn
- 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 10 일 : 이메일을 통해보고되었습니다.
- 2023 년 11 월 28 일 : Commit에서 패치.
- 파운드:
- 2023 년 10 월 10 일 : GH 문제를 통해보고되었습니다.
- 2023 년 10 월 11 일 : Commits 60A4F42 및 F70DB92를 통해 수정.
-
x00
또는 n
포함하는 헤더는 이전 헤더 값에 연결됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 모든 표준 호환 백엔드 서버.
- 위험 : 높음. 이것은 일반적인 요청 처리 취약성입니다.
- 페이로드 :
GET / HTTP/1.1rna:brncx00rnrn
- 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 10 일 : 이메일을 통해보고되었습니다.
- 2023 년 11 월 29 일 : Commit에서 패치.
- 메시지 본문은
Content-Length
헤더를 제거하지 않고 GET
요청에서 벗어납니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 파이프 라인을 지원하는 모든 백엔드 서버.
- 위험 : 높음. 이것은 일반적인 요청 처리 취약성입니다.
- 페이로드 :
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890
- 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 28 일 : 이메일을 통해보고되었습니다.
- 2023 년 12 월 1 일 : Commit에서 패치.
- 여러
Content-Length
헤더가 포함 된 요청이 전달되어 마지막 것의 우선 순위를 정합니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 여러
Content-Length
헤더가 포함 된 요청을 수락하는 서버. 첫 번째 우선 순위. - 위험 : 높음. 서버 버그 23을 참조하십시오.
- 페이로드 :
POST / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 31rnrnGET /evil HTTP/1.1rnHost: arnrn
- 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 30 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 : 픽스되지 않은 상태로 남아 있습니다.
-
Content-Length
및 Transfer-Encoding
모두 포함 된 요청이 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
Transfer-Encoding
보다 Content-Length
우선시하거나 Transfer-Encoding: chunked
. - 위험 : 높음. 이것은 고전적인 요청 밀수 벡터입니다.
- 페이로드 :
POST / HTTP/1.1rnHost: arnCon