Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2021-47881 — dataSIMS Avionics ARINC 664-1 v4.5.3 におけるローカルスタックバッファオーバーフローのPoCと解析。ペイロードの内訳、再現スクリプト、CVEレコードの修正を含みます。 | Kitploit
ツール/GitHubGitHub/kagancapar/cve-2021-47881
脆弱性分析エクスプロイトバイナリ解析学習と教育バイナリエクスプロイト
GitHubkagancapar/cve-2021-47881

CVE-2021-47881

dataSIMS Avionics ARINC 664-1 v4.5.3 におけるローカルスタックバッファオーバーフローのPoCと解析。ペイロードの内訳、再現スクリプト、CVEレコードの修正を含みます。

リポジトリを見る
41ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2021-47881

dataSIMS Avionics ARINC 4.5.3(Data Device Corporation)におけるローカル・スタックベース・バッファオーバーフロー

こんにちは。Kağan Çaparです。2020年2月、私はDDCのdataSIMSアビオニクス・データバスソフトウェアにローカルなスタックベースのバッファオーバーフローを発見し、2021年2月にExploit-DBで概念実証(PoC)を公開しました。それから約5年後、2026年1月にVulnCheckが遡及的なCVEとしてCVE-2021-47881を割り当てました。この割り当てを知ったのは事後であり、VulnCheckからの連絡によるものではありません。

このリポジトリは、その発見のアーカイブ記録です。公開当時のまま保存されたオリジナルのPoC、バイト単位で同一のPython 3移植版、ペイロードの注釈付き分解、そして公開済みCVEレコードの2つの問題に対する訂正を含みます。

最初に範囲を明確にします。 これは記録であり、根本原因分析ではありません。dataSIMSはクローズドソースの商用ソフトウェアであり、ベンダーのパッチはなく、現行リリースに対する再テストも行っていません。ここで検証可能なものは検証して示します。それ以外のものは制限事項で明示します。CVE-2026-5201のような深さを期待してここに来たのであれば、先にそのノートを読んでください。

CVECVE-2021-47881
CWECWE-121 — スタックベースのバッファオーバーフロー
CVSS v4.06.7 MEDIUM — AV:L/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N(VulnCheck)
CVSS v3.18.4 HIGH — AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H(VulnCheck)
影響を受ける製品dataSIMS Avionics ARINC 664-1、バージョン 4.5.3
ベンダーData Device Corporation
CNAVulnCheck
発見日2020-02-17
PoC公開日2021-02-19 — EDB-49577
CVE公開日2026-01-23(NVD)
ベンダーパッチ公開なし
テスト環境Windows 10 Enterprise x64

概要

影響を受けるコンポーネントは、dataSIMS 4.5.3のARINC 664-1モジュールです。このモジュールは、所属するモジュールにもかかわらずmilstd1553result.txtと命名された結果ファイルを読み戻します。このファイル名は、スイートのMIL-STD-1553系統から引き継がれたベンダーの遺物であり、影響を受けるモジュールを示すものではありません。攻撃者が整形した過長なバージョンの当該ファイルを供給すると、読み戻し経路で固定サイズのスタックバッファがオーバーフローし、保存されたリターンアドレスが上書きされます。クラッシュはEIPの完全な制御を伴って発生します。

root@kitploit:~
EIP  42424242        <- ペイロードからの'BBBB'
ECX  42424242
     C0000005        <- STATUS_ACCESS_VIOLATION

公開されたPoCは1040バイトで、EIPの上書きで停止します。コード実行には至らず、その意図もありませんでした — 悪用可能性(正直な評価)を参照してください。

ペイロードの構造

移植版(py poc/poc_py3.py --layout)の実行で検証されたPoCのフィールドレイアウト:

フィールドオフセット長さ内容
junk0 / 0x0006000x41 フィラー
align600 / 0x2588"22221111"
prop608 / 0x2603800x43 フィラー
imp988 / 0x3dc10"bzhrturlu2"
imp2998 / 0x3e69"aracag" 0x13 "1z"
overwrite1007 / 0x3ef40x42 × 4 → 保存されたリターンアドレス
buf1011 / 0x3f329shikata_ga_nai デコーダスタブ
合計1040sha256 530efb5efef917082e40dcf379f5e0a526375724af18aba6f0270f794f96d066

EIPのオフセットは1007です。 これは!mona findmspやpattern_offset.rbから得られる数字ではありません — 5つの手動調整フィールドの合計です。オリジナルのPoCは、オフセットを解析的に特定するのではなく、リターンアドレスが移動するまでクラッシュを拡大させることで構築されました。私はこれを粉飾せずに明記します。クリーンな書き直しであれば、保存されたリターンアドレスまでの真の距離を特定し、align、imp、imp2はどれも意味を持たないため、完全に削除できるでしょう。imp/imp2はフィラー文字列であり、インポートではありません。

デコーダスタブは不活性である

bufは29バイトのmsfvenom shikata_ga_naiスタブです。ndisasm -b32で逆アセンブルした結果:

root@kitploit:~
00000000  DAC1              fcmovb st1              ; ジャンクFPU命令(sgn署名)
00000002  D97424F4          fnstenv [esp-0xc]       ; GetPC
00000006  58                pop eax                 ; eax = &stub
00000007  BB0B7E9762        mov ebx,0x62977e0b      ; XORキー
0000000C  33C9              xor ecx,ecx
0000000E  B101              mov cl,0x1              ; <-- 1つの4バイトブロック
00000010  315819            xor [eax+0x19],ebx      ; +0x19のブロックをデコード
00000013  83E8FC            sub eax,-4              ; eax += 4
00000016  035815            add ebx,[eax+0x15]      ; キースケジュール
00000019  E9                db 0xe9                 ; <-- エンコード済みブロック、コードではない
0000001A  8B                db 0x8b
0000001B  7C9C              jl 0xffffffb9

これから2つのことが明らかになり、どちらもペイロードが実行され得ないことを意味します。

  1. mov cl,0x1 — デコードループは単一の4バイトブロック用に構成されています。背後に実際のペイロードはなく、その4バイトだけです。
  2. \xe2\xf4(loop)ターミネータが存在しません。 完全なsgnスタブは、エンコードされた本体の前にloopでデコードループを終了させます。ここでは実行がadd ebx,[eax+0x15]からE9 8B 7C 9Cへまっすぐ落ちます。これはその時点ではまだエンコードされており、いずれにせよ有効な命令シーケンスでもありません。

つまり、このスタブはペイロードの末尾を占めるプレースホルダーです。これはExploit-DBでのPoCの説明と一致しており、正直な解釈です:これはEIP制御のデモであり、動作するエクスプロイトではありません。

悪用可能性(正直な評価)

CVSS v3.1ベクターのやり方ではなく、ブローカーやベンダーが行うようにこれを評価します:

  • 特権境界は越えられません。 milstd1553result.txtはアプリケーション自身が生成するファイルであり、同じユーザーがすでに制御している場所にあります。これを書き換えられる攻撃者は、通常、そのユーザーとしてコードを実行することもすでに可能です。これはセキュリティバグというより、堅牢性バグです。
  • PoCは何ものにも先行していません。 2020年頃のx86ビルドでのEIP制御は、それ自体ではほとんど意味を持ちません。これを実行に変えるにはDEP/ASLR対策の物語 — /DYNAMICBASEを持たないモジュール、ROPチェーン、または部分的な上書き — が必要です。そのいずれも行われておらず、現行ビルドにどのような緩和策が含まれているかも確認していません。
  • ローカルであり、オペレーターがファイルを読み込む必要があります。 CVSS v4.0のUI:Aは現実を反映しています。v3.1のUI:Nは反映していません。

誰かがこれを本当に興味深いものにしたいのであれば、生産的な攻撃面はこのファイルではなく、DDCが1553/664 PCIeカード用に出荷しているカーネルドライバ(IOCTL処理 → LPE)、ネットワークに面したARINC 664/AFDXフレーム解析、そしてスイートが信頼できないソースから消費する入力ファイル形式です。これらは実際の境界を越えます。これは越えません。

公開記録に対する訂正

CVEレコードには、私の名前で公開されている以上、明確に述べるべき2つの欠陥があります。

1. 引用されたベンダー製品が誤っている

レコードの製品指定 —「dataSIMS Avionics ARINC 664-1 バージョン 4.5.3」— は正しいです。影響を受けるコンポーネントは、私のオリジナルのExploit-DBタイトルで述べたとおり、ARINC 664モジュールです。

欠陥は、CNAが添付したベンダー参照にあります。NVDはBU-69414を引用していますが、これはDDCのMIL-STD-1553ソフトウェア製品ページであり、この発見が影響するものとは異なるデータバススタックです。ARINC 664はAFDX(プロファイル化されたスイッチドイーサネット、ARINC 664 Part 7)です。MIL-STD-1553は1Mbpsの二重冗長コマンド/レスポンスバスです。両者は無関係の規格です。

誤引用の可能性が高い原因は、結果ファイル名です。dataSIMSはARINC 664モジュールの結果ファイルをmilstd1553result.txtと名付けています — これはスイートのMIL-STD-1553系統からの残存物です。CVEの説明を読んで一致するベンダー製品ページを探す人は誰でも、この文字列を辿って1553系にまっすぐ到達します。それが実際に起こったことのようです。ファイル名は影響を受けるモジュールの証拠ではなく、1553製品ページを指すレコードは、ディフェンダーを誤ったコンポーネントの監査へと導きます。

2. 2つのCVSSベクターは相互に排他的である

両方のベクターはVulnCheck由来であり、重要となる2つの点で互いに矛盾しています:

v3.1 (8.4 HIGH)v4.0 (6.7 MEDIUM)
ユーザー操作UI:N — 不要UI:A — 必須
影響C:H/I:H/A:H — CIA完全侵害VC:N/VI:N/VA:H — 可用性のみ

両方が正しいことはあり得ません。v4.0ベクターが擁護可能な方です。PoCが示すのはクラッシュであり、情報漏えいや完全性の喪失ではありません。v3.1のスコア8.4はこの発見を過大評価しており、私はそれをここで明言するほうを選びます。

再現

ここで必要なものに対象ソフトウェアは含まれません。PoCは不正なファイルを書き込むだけです。オーバーフローのトリガーにはdataSIMS 4.5.3が必要ですが、これはライセンスされた商用ソフトウェアであり、このリポジトリは配布しません。

root@kitploit:~
# フィールドマップを表示し、何も書き込まない
py poc/poc_py3.py --layout

# 1040バイトのペイロードを書き込む
py poc/poc_py3.py -o milstd1553result.txt

その後、影響を受けるビルドでデバッガの下にファイルを読み込ませ、EIPの上書きを観察します。poc/49577.pyはオリジナルのPython 2ソースをそのままアーカイブしたもので、Python 3では実行できません。

Python 2 → 3 移植に関する注記

移植版はバイト単位で同一の1040バイトファイル(sha256 530efb5e…)を生成します。変更が必要だったのは3点、そしてバグのように見えてバグではないものが1点あります:

  • print len(win32)はPython 2では文であり、Python 3ではSyntaxErrorになります。
  • オリジナルはstrフィールドとbytesシェルコードを連結しています。Python 2ではstrがバイトそのものだったため許容されましたが、Python 3ではTypeErrorが発生します。
  • open(..., "w")は"wb"に変更する必要があります。テキストモードではPython 3がスタブ内の0x80以上のすべてのバイトをUTF-8エンコードし — 0xda → 0xc3 0x9a — ペイロードを静かに破損させ、長さを変えてしまいます。
  • imp2 = "\x61\x72\x61\x63\x61\x67\x131\x7a"はバージョン依存の癖ではありません。\xはPython 2と3の両方で正確に2桁の16進数を受け取るため、\x131は0x13の後に文字1が続くものになります。このフィールドは両方で9バイトです。単に見た目が悪いだけです。

制限事項

何が行われ、何が行われなかったかを誰も推測しなくて済むように、明示的に述べます:

  • 根本原因分析なし。クローズドソースのバイナリであり、オーバーフローする関数は特定されていません。
  • パッチなし、ベンダー勧告なし、調整済み開示記録なし — 2020年の発見は直接Exploit-DBに公開されました。
  • 4.5.3以降のリリースでの再テストなし、現行のWindows緩和策に対するテストもなし。
  • 動作するコード実行なし。EIPの上書きが結果のすべてです。
  • CVEは公開から5年後の2026年に第三者CNAによって遡及的に割り当てられ、私への連絡はありませんでした。

タイムライン

日付出来事
2020-02-17脆弱性を発見
2021-02-19PoC公開 — EDB-49577
2026-01-22VulnCheck勧告公開
2026-01-23CVE-2021-47881がNVDに公開
2026-06-17NVDレコード最終更新

参考情報

  • https://nvd.nist.gov/vuln/detail/CVE-2021-47881
  • https://www.cve.org/CVERecord?id=CVE-2021-47881
  • https://www.vulncheck.com/advisories/datasims-avionics-arinc-local-buffer-overflow
  • https://www.exploit-db.com/exploits/49577
  • https://www.ddc-web.com/

クレジット

Kağan Çapar — GitHub · Exploit-DB · LinkedIn · X

解説記事: English · Türkçe

ツールをダウンロード