
Apache Traffic Server 10.2.0 - 높음 - 원격 - 파일 쓰기 - 서명되지 않은 magick convert가 nobody 권한으로 쓰기 수행
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-magick-unsigned
분류: 파일 쓰기 도달 범위: 원격
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
실험적 magick은 plugin.config에 RSA 키가 없을 때 ?magick=(퍼센트+base64 변환 argv)로부터 ImageMagick ConvertImageCommand를 실행합니다. verified = nullptr == key_. README에는 악용을 피하기 위해 키가 존재한다고 명시되어 있습니다. 인자 없이 magick.so를 로드하는 것이 플러그인의 기본 동작입니다.
plugin.config에 RSA 공개 키가 있는 서명된 CONTROL은 403이며, 증거 파일이 없습니다. 분류는 파일 쓰기로 유지됩니다. 배포판의 policy.xml은 종종 URL/셸 델리게이트를 비활성화합니다. RCE로 과장하지 마십시오.
| ID | 아직 CVE 없음 |
| 분류 | 파일 쓰기 (서명되지 않은 변환 argv) |
| 도달 범위 | 원격 (키 없는 magick.so를 통한 인증 없는 HTTP ?magick=) |
| CWE | CWE-347, CWE-73 |
| CVSS | 높음: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| 제품 | Apache Traffic Server |
| 영향받음 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) 실험적 magick 서명되지 않은 변환 |
| 인증 | 없음 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18800 전용 |
공개 태그 10.2.0의 peel b1df7334를 고정했습니다. 랩은 루프백에서 소스로 빌드한 ats-10.2.0-lab:local 리버스 프록시입니다. 서명되지 않은 변환 -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS. 증거 파일 161바이트, 소유자 nobody. 서명된 CONTROL 403.
호환되는 Content-Type의 오리진 이미지에 대해, magick.so가 로드되고 RSA 키가 없는 상태에서 인증 없는 GET /img.png?magick=.
| 방법 | 싱크 | 권한 |
|---|---|---|
인증 없는 GET /img.png?magick= 서명되지 않은 변환 -write png:/tmp/oracle/ATS-MAGICK-UNSIGNED-WITNESS | verified = nullptr == key_ (magick.cc:593-609) 후 ConvertImageCommand | 무결성 / 파일 (랩 입증): 161바이트 증거 파일 소유자 nobody. 로그 ImageMagick's syntax. HTTP 200. |
plugin.config에 RSA 키가 있는 동일 쿼리 | EVP_DigestVerify | 차단됨 (랩 입증): 403 서명 검증 실패. 증거 파일 없음. |
| 거대한 오리진 블롭 | 무제한 blob_ | 가용성 (추론): 프로세스 메모리 압박. CVE-2026-58186 상한의 형제. 이 High 행은 아님. |
| IM URL / 셸 델리게이트 | policy.xml | 이 랩에서 차단됨: HTTP/HTTPS/URL/MVG/셸 델리게이트 없음. RCE라고 부르지 마십시오. |
랩 입증 vs 추론: nobody로서의 서명되지 않은 파일 쓰기, 서명된 403, 구문 로그는 랩 결과입니다. 무제한 블롭 DoS는 추론입니다. RCE는 주장하지 않습니다.
요구 사항: 검증 키 없는 실험적 magick.so, 그리고 변환 경로 쓰기를 여전히 허용하는 ImageMagick policy.xml. 기본 plugin.config에서는 로드되지 않습니다.
| 표면 | 랩 |
|---|---|
| RSA 공개 키와 함께 로드된 magick | CONTROL 403, control-sigfail=yes, 파일 없음 |
| magick 미로드 | 쿼리 magick은 무효 |
wasm WASI path_open | NOENT |
| IM 입력으로서의 요청 본문 | 오리진 응답 블롭이 입력 |
| webp_transform 바운드 디코드 | CVE-2026-58186 차단됨; magick 블롭은 바운드되지 않은 형제 |
CVE-2026-58186이 아니다. Magick README에는 이미 악용을 피하기 위해 키가 존재한다고 명시되어 있었다. 남은 문제는 해당 키 없이 플러그인을 로드하는 것이다.
python3 ats-magick-unsigned-Abraxas-Labs.py
또는
cd lab
./run.sh
Loopback 127.0.0.1:18800 (두 번째 리스너에서 서명된 CONTROL). Compose 프로젝트 ats-magick-unsigned. 이미지 ats-10.2.0-lab:local. Witness ATS-MAGICK-UNSIGNED-WITNESS. 마지막 줄:
SUCCESS ats-magick-unsigned unsigned-http=200 file-write=yes uid=nobody syntax-log=true control-http=403 control-sigfail=yes ATS-MAGICK-UNSIGNED-WITNESS
key_가 null일 때 fail closed로 동작해야 합니다. 검증된 magickSig 없이 클라이언트의 ?magick=에 대해 ConvertImageCommand를 실행하지 마십시오. 키가 누락된 경우를 "서명되지 않은 변환이 괜찮다"가 아니라 "플러그인 설정 오류"로 취급하십시오. webp_transform이 제한된 방식과 동일하게 blob_에도 상한을 두십시오.
그때까지는 프로덕션 규모의 RSA 공개 키 없이 magick.so를 로드하지 마십시오. 배포판의 policy.xml은 서명을 대체할 수 없습니다.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/magick/magick.cc verified = nullptr == key_plugins/experimental/magick/README