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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
dnsmasq-cve-2026 — 6件のdnsmasq CVE (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172) に対する自動欠陥検証ツール | Kitploit
ツール/GitHubGitHub/jianrongxiao-linksys/dnsmasq-cve-2026
脆弱性分析エクスプロイトファジングネットワークセキュリティペネトレーションテストバイナリ解析DNS分析
GitHubjianrongxiao-linksys/dnsmasq-cve-2026

dnsmasq-cve-2026

6件のdnsmasq CVE (CVE-2026-2291, 4890, 4891, 4892, 4893, 5172) に対する自動欠陥検証ツール

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

人気

すべて見る →

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

すべてのツールを探索

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

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

dnsmasq CVE-2026 QA検証ツール

6件のdnsmasq脆弱性(2026年5月)を検証する自動ブラックボックスツールです。稼働中のDUTに攻撃パケットを送信し、PASS/FAILを報告します。ソースコードへのアクセスは不要です。

クイックスタート

# Set DUT DNS to your laptop's WAN IP via GUI first, then:
sudo python3 dnsmasq_cve_verify.py --laptop <YOUR_WAN_IP> --dut <DUT_LAN_IP> --dut-pass <SSH_PASS>

# Example:
sudo python3 dnsmasq_cve_verify.py --laptop 10.0.0.211 --dut 192.168.1.1 --dut-pass '12345Asdf@'

テスト対象のCVE

CVECVSS種類攻撃ベクトル影響を受ける機能
CVE-2026-22919.2ヒープバッファオーバーフローリモートextract_name() — 常に有効
CVE-2026-51727.5OOB読み取り / クラッシュリモートextract_addresses() — 常に有効
CVE-2026-48907.5無限ループDoSリモートNSECビットマップ解析(--dnssec)
CVE-2026-48915.3ヒープOOB読み取りリモートRRSIG検証(--dnssec)
CVE-2026-48928.4ヒープオーバーフロー → rootローカル/隣接DHCPv6 CLID(--dhcp-script + DHCPv6)
CVE-2026-48935.3検証バイパスリモートECSソースチェック(--add-subnet)

各テストの仕組み

CVE-2026-2291(Critical — extract_name のヒープオーバーフロー)

根本原因: union bigname は char name[MAXDNAME] を宣言していますが、エスケープされた文字によって名前が 2*MAXDNAME+1 バイトに拡張される可能性があり、ヒープオーバーフローを引き起こします。

テスト方法: 内部で \DDD エスケープ(入力バイトごとに4バイト)される上位ビット文字(0x80以上)を含むドメイン名を持つDNSクエリを送信します。dnsmasqがクラッシュするか応答しなくなった場合、脆弱です。

パッチ適用後の動作: 過大な名前を適切に拒否する(FORMERR/REFUSED)、または拡大されたバッファを使用します。

CVE-2026-5172(High — extract_addresses のOOB読み取り)

根本原因: 改ざんされた rdlen フィールドにより、extract_name() がポインタをレコードの末尾を超えて進めます。残りバイト数のアンダーフローが巨大な値を生み出し、大規模なOOB読み取り → クラッシュにつながります。

テスト方法: rdlen が実際にエンコードされた名前より小さいCNAMEレコードを含むDNSレスポンスを送信します。dnsmasqがクラッシュした場合、脆弱です。

パッチ適用後の動作: extract_name() の後にポインタが宣言されたrdlen境界内に留まることを検証します。

CVE-2026-4890(High — DNSSEC NSEC 無限ループ)

根本原因: NSECタイプビットマップの解析は p[1]+2 ではなく p[1] だけ進みます(ウィンドウヘッダーサイズが欠落)。bitmap_length=0 の場合、ポインタが進まないため、無限ループになります。

テスト方法: window=0, bitmap_length=0 の細工されたNSECレコードを送信します。dnsmasqがすべてのクエリに応答しなくなった場合(クラッシュではなくハング)、脆弱です。RRSIG検証の前に悪用可能です。

パッチ適用後の動作: p[1]+2 だけ進み、長さゼロのビットマップをスキップします。

CVE-2026-4891(Moderate — RRSIG ヒープOOB読み取り)

根本原因: RRSIG内の rdlen が最小サイズ(18 + 署名者名)に対して検証されません。計算された署名長が負にアンダーフローし、巨大な値として扱われ、OOB読み取りが発生します。

テスト方法: rdlen=10(最小の31+バイトをはるかに下回る)のRRSIGレコードを送信します。クラッシュ = 脆弱です。

パッチ適用後の動作: 署名長を計算する前に rdlen >= fixed_fields + signer_name_length を検証します。

CVE-2026-4892(High — DHCPv6 CLID によるローカルroot権限取得)

根本原因: DHCPv6 CLID(最大65535バイト)は sprintf("%.2x") によって daemon->packet(5131バイト)に16進エンコードされます。3000バイトのCLID → 6000バイトの16進文字列 → オーバーフロー。ヘルパープロセスはrootで実行されます。

テスト方法: 3000バイトのクライアント識別子を含むDHCPv6 SOLICITを送信します。IPv6隣接性と --dhcp-script の設定が必要です。ヘルパーのクラッシュ = 脆弱です。

パッチ適用後の動作: 16進エンコードの前にCLIDの長さを切り詰めるか検証します。

注記: 一部のビルドは -DNO_DHCP6 でコンパイルされており、このCVEの影響を受けません。

CVE-2026-4893(Moderate — ECSソース検証バイパス)

根本原因: process_reply() は完全なパケット長ではなくOPTレコード長(約23バイト)を check_source() に渡します。すべての境界チェックが機能せず、関数は常に1(有効)を返します。

テスト方法: 偽装されたソースプレフィックスを含むEDNS Client Subnetオプションを持つDNSクエリを送信します。dnsmasqが検証なしでECSをそのまま返す場合、脆弱です。

パッチ適用後の動作: check_source() に完全なパケット長を渡し、RFC 7871のセクション9.2に従った適切な境界チェックを可能にします。

対策

dnsmasq 2.92rel2 へのアップグレード(推奨)

  • ソース: https://thekelleys.org.uk/dnsmasq/dnsmasq-2.92rel2.tar.xz
  • アップストリームパッチ: https://thekelleys.org.uk/dnsmasq/CVE/

自動欠陥検証ツール(dnsmasq_cve_verify.py)

主要なQAツールです。テスト用ラップトップ上で実行され、DUTに攻撃パケットを送信し、各CVEについて明確なPASS/FAILを報告します。状態確認のための読み取り専用SSHアクセス以外に、DUTの変更は不要です。

ネットワーク構成

┌─────────────────────────────────────────────────────────────────────┐
│                        Testing Laptop                                │
│                                                                      │
│   LAN interface                   WAN interface                      │
│   <LAPTOP_LAN_IP>                 <LAPTOP_WAN_IP>                   │
│        │                               │                            │
│        │                          ┌────┴──────────────┐             │
│        │                          │ Malicious DNS     │             │
│        │                          │ Server (port 53)  │             │
│        │                          └────┬──────────────┘             │
│        │                               │                            │
└────────┼───────────────────────────────┼────────────────────────────┘
         │ LAN subnet                    │ WAN subnet
         │                               │
┌────────┼───────────────────────────────┼────────────────────────────┐
│        │                               │                            │
│   LAN: <DUT_LAN_IP>              WAN: <DUT_WAN_IP>                  │
│   (LAN gateway)                   (WAN uplink)                      │
│                                                                      │
│              DUT (Linksys Router)                                    │
│              dnsmasq (any version < 2.92rel2)                        │
│                                                                      │
│   resolv-file=/etc/resolv.conf                                      │
│   → nameserver <LAPTOP_WAN_IP>  ← set via GUI, forwards to us      │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

Data flow:
  1. Tool sends DNS query to DUT LAN IP (port 53)
  2. DUT's dnsmasq can't resolve locally → forwards upstream to LAPTOP_WAN_IP
  3. Our malicious server on WAN interface replies with exploit payload
  4. DUT's dnsmasq processes the malicious response → crash/hang/survive
  5. Tool checks DUT state via SSH (read-only)

設定例(実際のIPは異なります):

役割IP(例)
ラップトップLAN192.168.1.254
ラップトップWAN10.0.0.211
DUT LAN192.168.1.1
DUT WAN10.0.0.214

重要な要件: ラップトップのWAN IPとDUTのWAN IPが同じサブネット上にある必要があります。これにより、DUTはアップストリームDNSサーバーとしてラップトップに到達できます。

動作の仕組み

┌──────────┐     ┌───────────┐     ┌──────────────────┐     ┌──────────┐
│  SETUP   │ ──► │  TRIGGER  │ ──► │  STATE INSPECT   │ ──► │  VERDICT │
│          │     │           │     │                  │     │          │
│ Start    │     │ Send DNS  │     │ SSH to DUT:      │     │ PASS:    │
│ malicious│     │ query to  │     │ - pidof dnsmasq  │     │ survived │
│ DNS srv  │     │ DUT→DUT   │     │ - PID changed?   │     │          │
│ on WAN   │     │ forwards  │     │ - dmesg crash?   │     │ FAIL:    │
│ interface│     │ to us→we  │     │ - /var/log/msg   │     │ crashed/ │
│ (10.0.0. │     │ reply w/  │     │                  │     │ hung     │
│  211:53) │     │ exploit   │     │ Liveness query   │     │          │
│          │     │ payload   │     │ (version.bind)   │     │          │
└──────────┘     └───────────┘     └──────────────────┘     └──────────┘

NOTE: Tool does NOT modify DUT settings. User must set DNS to 10.0.0.211 via GUI.

QAテスト手順

前提条件

  • 2つのネットワークインターフェース(LAN + WAN)を備えたテスト用ラップトップ
  • paramiko がインストールされたPython 3.6以上(pip install paramiko)
  • DUTへのSSHアクセス(root認証情報)
  • DUTの管理GUIにアクセス可能

ステップ1: 物理接続

テスト用ラップトップとDUTを2本のケーブルで接続します:

ラップトップのポート接続先目的
LANポートDUTのLANポートSSHアクセス + DUTへのDNSクエリ送信
WANポートDUTのWANサブネット(例: アップストリームのスイッチ/モデムポート)アップストリームDNSサーバーとして動作

接続後、ラップトップのIPを確認します:

# Find your IPs
ip addr show | grep "inet "
# Example output:
#   inet 192.168.1.254/24 ...  ← this is your LAN IP
#   inet 10.0.0.211/24 ...     ← this is your WAN IP (use this for --laptop)

ステップ2: GUIでDUTのDNSをラップトップに設定

  1. ブラウザを開き、DUTの管理ページにアクセスします:
    • 例: http://192.168.1.1 または http://myrouter.local
  2. 管理者認証情報でログインします
  3. 接続 → インターネット設定 → 編集(IPv4の横)に移動します
  4. DNS で 静的DNS を選択します
  5. DNS 1 にラップトップのWAN IPを設定します(例: 10.0.0.211)
  6. 適用 をクリックします
  7. 設定が反映されるまで5〜10秒待ちます

ステップ3: ツールを実行

cd /path/to/dnsmasq-cve-2026/
ツールをダウンロード