このディレクトリには、CVE-2025-65637 として割り当てられた、github.com/sirupsen/logrus のサービス拒否(DoS)脆弱性に関する概念実証コードとテストスクリプトが含まれています。
CVE ID: CVE-2025-65637
CWE: CWE-400(制御されないリソース消費)
CVSS: 7.5(高)
発見者: Christopher Straight, Juan Pablo Mandelbaum
github.com/sirupsen/logrus では、Entry.Writer() を使用して改行文字を含まない64KBを超える単一行ペイロードをログに記録する場合、サービス拒否の脆弱性が存在します。
内部の bufio.Scanner の制限により、読み取りが "token too long" で失敗し、Writer パイプが閉じられるため、Writer() が使用不能になり、アプリケーションが利用不能(DoS)になります。
これは、バージョン < 1.8.3、1.9.0、1.9.2 に影響します。この問題は 1.8.3、1.9.1、1.9.3+ で修正されており、入力がチャンク化され、エラーがログに記録された場合でも Writer は機能し続けます。
影響を受けるバージョン:
< v1.8.3(v1.8.1、v1.8.2 を含む)
v1.9.0
v1.9.2
修正済みバージョン:
v1.8.3
v1.9.1
v1.9.3+
poc_logrus_dos_improved.go - 脆弱性を示すスタンドアロンのPoC
poc_logrus_dos.go - よりシンプルなPoCバージョン
test_versions.ps1 - 複数バージョンをテストするPowerShellスクリプト
test_versions.sh - 複数バージョンをテストするBashスクリプト
test_single_version.ps1 - 単一バージョン用のクイックテスト
# PowerShell
.\test_single_version.ps1 v1.8.1
# PowerShell
.\test_versions.ps1
# Bash/Linux
chmod +x test_versions.sh
./test_versions.sh
go mod init poclogrus
go get github.com/sirupsen/[email protected]
go run poc_logrus_dos_improved.go
包括的なテストにより、以下が確認されています。
この脆弱性は、logrus.Writer() が改行を含まない64KBを超える単一行を受け取ったときに発生します。これは、アプリケーションがユーザー制御のデータ(例:User-AgentなどのHTTPヘッダー、サブプロセスのstdout/stderr)を logrus.Writer() にパイプする場合に発生する可能性があります。
脆弱なバージョン: 内部スキャナーが失敗し、パイプが壊れ、アプリケーションはログ記録を失うかクラッシュします(DoS)。
修正済みバージョン: エラーはログに記録されますが、Writer は引き続き正常に機能するため、DoS を防ぐことができます。
| Version | 状態 | エラー有無 | Writer 破損 |
|---|
| v1.8.1 | 脆弱 | True | True |
| v1.8.2 | 脆弱 | True | True |
| v1.8.3 | 修正済み | True | False |
| v1.9.0 | 脆弱 | True | True |
| v1.9.1 | 修正済み | True | False |
| v1.9.2 | 脆弱 | True | True |
| v1.9.3 | 修正済み | True | False |