
Danfoss AK-SM 8xxAのCVE-2025-41450/-41451/-41452に対応するPoCおよび検出ツールキット。コード・オブ・ザ・デイ認証バイパス、アラームからメールへのRCE、nginx設定インジェクションを扱い、Suricata/Sigmaルールを同梱。
Claroty Team82によって公開され、DanfossによってR4.2 / R4.3.1で修正されたAK-SM 8xxA Webインターフェースの3つの脆弱性(DSA-2025-03-01、DSA-2025-08-01、CISA ICSA-25-140-03)に関する研究/検出エンジニアリング向けPoC:
| CVE | 脆弱性 | 影響範囲 | 修正版 |
|---|---|---|---|
| CVE-2025-41450 | xml.cgi?action=getauth における隠し「code-of-the-day」認証バイパス(日時由来のパスワード) | < R4.2 | R4.2 |
| CVE-2025-41451 | 認証後のアラームメール/SMTP設定(項目 0x1be1)におけるOSコマンドインジェクション | < 4.3.1 | 4.3.1 |
| CVE-2025-41452 | 認証後の action=load_nginx_headers によるnginx headers.conf の置換 → ディレクティブインジェクションおよびsm_appクラッシュによるDoS | < 4.3.1 | 4.3.1 |
emulator/aksm800a_emulator.py vulnerable-behavior emulator (127.0.0.1 only)
poc/cve_2025_41450_code_of_the_day.py
poc/cve_2025_41451_alarm_mail_cmd_injection.py
poc/cve_2025_41452_nginx_conf_injection.py
detection/suricata/danfoss-aksm-cves.rules Suricata rules (see in-file caveats)
detection/sigma/*.yml Sigma host/log rules
detection/test_rules_against_captures.py replay captures against the ruleset
captures/http-requests.jsonl full request log, tagged per CVE
WRITEUP.md FROMAGEGATE incident context + full research summary
Python 3 標準ライブラリのみ。依存関係なし。
python3 emulator/aksm800a_emulator.py 8080 & # start the target
python3 poc/cve_2025_41450_code_of_the_day.py # exit 0 = bypass works
python3 poc/cve_2025_41451_alarm_mail_cmd_injection.py
python3 poc/cve_2025_41452_nginx_conf_injection.py # add --no-dos to skip DoS
python3 detection/test_rules_against_captures.py # replay captures vs Suricata rules
41451 と 41452 の PoC はデフォルトで 41450 のバイパスを経由して連鎖します(実際の攻撃者には設定済みの認証情報がありません)。両方とも --user/--password(41451)を受け付け、正規のセッションから開始することもできます。すべての PoC は --target HOST:PORT を受け付けるため、実際の脆弱なファームウェアに対しても動作しますが、code-of-the-day アルゴリズムとバイパス属性名は、ファームウェアから復元した値に置き換える必要があります(以下の注意事項を参照)。
各エミュレータリクエストはタグ付きで captures/http-requests.jsonl に記録されます。安定しておりシグネチャとして価値のあるネットワークアーティファクトは以下のとおりです。
CVE-2025-41450(認証バイパス)
POST /xml.cgi?action=getauth(ここでは codeofday=1 / support=1。実際の名前は公開情報では伏せられているため、最終的なルールにはファームウェアから復元した値を使用する)。Server: nginx)は本質的に脆弱である。バナー/バージョン検出が最も信頼性の高いシグナルである。CVE-2025-41451(コマンドインジェクション → RCE)
0x1be1)にシェルメタ文字(; | & $() `)を含む、認証済みの POST /xml.cgi?action=set_email_config。正規の SMTP パスワードに ; とコマンドが含まれることはまれである。x'; <cmd> # / $(<cmd>) など。値がシェルにどのように到達するかの正確な挙動は、タグ付きの constructed_cmd: ログ行を参照。id、curl など)を起動する。CVE-2025-41452(nginx 設定インジェクション → トラフィック操作 / DoS)
xml.cgi?action=load_nginx_headers への認証済みマルチパートアップロード(ファイル名 headers.conf)。このエンドポイントはまれな管理者メンテナンス以外に正当な呼び出し理由がないため、ボリュームベースのアラートが有効である。location、proxy_pass、rewrite、add_header ディレクティブが含まれる。emulator/aksm800a_emulator.py:generate_code)が同梱されている。PoC とエミュレータはこれを共有しているため、連鎖はエンドツーエンドで機能する。実機の場合は、ファームウェアから check_code_of_day を抽出して組み込むこと。id → 証明ファイル)。127.0.0.1 のみでバインド/実行すること。