TL;DR

Dreadnode công bố demo dùng .NET reversing capability trong TUI v2.0 để scan binary Azure Cosmos DB kéo về từ Microsoft Container Registry (MCR). Agent chạy bằng Moonshot Kimi K2.6, hoàn thành trong 19 phút 26 giây, tiêu tốn $1.97, và phát hiện một lỗ high severity: TLS certificate validation callback trong managed identity auth bị viết tautological — luôn trả về true bất kể cert đến từ đâu. Đây là case study mạnh cho kỷ nguyên LLM-driven SAST trên compiled binary, không cần source.

What's new

Dreadnode vừa ra mắt v2.0 (24/03/2026) với TUI mới và capability registry. Trong đó, dotnet-reversing là một capability độc lập: nhận input là binary .NET (local path hoặc NuGet package ID), dùng Mono.Cecil + ILSpy để decompile, rồi giao IL-reconstructed C# cho LLM phân tích theo mục tiêu do user chỉ định (ví dụ: "find all critical security vulnerabilities").

Model được chọn là Kimi K2.6 — mô hình MoE 1 nghìn tỷ tham số của Moonshot AI, open-weight, ra mắt 20/04/2026. K2.6 mạnh ở long-horizon coding và agent swarm, context window 262K token, nên nuốt gọn toàn bộ reconstructed source của Cosmos DB trong 1 run.

Technical facts

Con số hiệu suất Dreadnode công bố:

Chỉ sốGiá trị
ModelMoonshot AI Kimi K2.6
Runtime19 phút 26 giây
Input tokens↑ 3,124,000
Output tokens↓ 33,300
Cost$1.97
TargetAzure Cosmos DB (deprecated .NET binary từ MCR)
Finding1 x high severity TLS validation bug

Tỷ lệ input/output ~94:1 rất điển hình cho SAST heavy-context: agent nạp lượng lớn decompiled code, chỉ emit một finding ngắn ở output. Với pricing OpenRouter $0.80 / $3.50 per M token input/output, tổng $1.97 khớp gần sát — một SAST scan toàn sản phẩm enterprise với giá bằng một ly latte.

Chi tiết lỗ hổng: TLS callback tautological

Khi Azure Cosmos DB dùng managed identity để auth, client gọi một internal token service qua HTTPS. TLS validation được override bằng RemoteCertificateValidationCallback tự viết. Logic — viết lại dưới dạng giả lập:

bool Validate(X509Certificate cert, X509Chain chain, SslPolicyErrors errors) {
    var leafThumbprint = cert.Thumbprint;
    foreach (var element in chain.ChainElements) {
        if (element.Certificate.Thumbprint == leafThumbprint)
            return true;
    }
    return false;
}

Bug nằm ở chỗ: theo định nghĩa X.509, leaf cert luôn nằm ở chain.ChainElements[0]. Nên check "thumbprint của leaf có match cert nào trong chain không?" là tautology — mặc định luôn đúng. Kết quả: callback trả true cho mọi server cert, kể cả cert tự ký của attacker.

Nếu kẻ tấn công chiếm được network path tới internal token service endpoint, họ có thể trình cert tùy ý và đánh cắp managed identity token mà client tưởng đang gửi cho Azure. Đây là lỗ class broken certificate validation kinh điển — đã thấy ở nhiều .NET client khác (xem dotnet/runtime #59944).

Why it matters

Ba điều đáng chú ý:

  • Legacy binary vẫn chứa vuln exploitable. Cosmos DB phiên bản bị scan đã deprecated, nhưng binary vẫn được serve trên MCR — nghĩa là nhiều deployment production vẫn pull về chạy. Deprecated ≠ không đáng audit.
  • SAST không cần source code. Với binary + decompiler + LLM đủ context, bạn có thể audit sản phẩm closed-source. Đây là mô hình Wiz/Orca đã đi, giờ LLM khiến nó rẻ và nhanh hơn 1-2 bậc độ lớn.
  • Kimi K2.6 thực chiến được. 3.1M token input là workload phi nhỏ — K2.6 xử lý đầy đủ, giá hợp lý, chất lượng đủ bắt ra logic bug mà grep/rule không thấy.

Dreadnode + LLM vs traditional SAST

Tiêu chíDreadnode + Kimi K2.6Traditional SAST (CodeQL, Semgrep)
InputBinary đã compileSource code + build pipeline
Thời gian~20 phút / sản phẩmHours → days cho coverage tương tự
Chi phí~$2 per scan (token LLM)License + engineer time
Semantic depthHiểu logic tautologicalKhó viết rule catch bug logic-level
ReliabilityNon-deterministic, cần verifyDeterministic, ít hallucinate

Không phải thay thế — là bổ sung. Traditional SAST vẫn vô đối về coverage có quy luật rõ. LLM-SAST bắt được class bug mà con người phải đọc code mới hiểu.

Use cases thực tế

  • Audit closed-source SDK trước khi tích hợp vào stack
  • Supply-chain scan NuGet package ẩn danh
  • Red team recon: phân tích binary đã deploy tại target
  • Legacy/deprecated product audit — case study Cosmos DB chính là mẫu
  • Cloud provider research — theo chân Wiz, Orca tìm ChaosDB, CosMiss

Limitations & pricing

Dreadnode TUI v2.0 GA từ 24/03/2026, install qua dn CLI. Capability registry mở bằng Ctrl+P trong TUI. Kimi K2.6 open-weight (Modified MIT) — team có yêu cầu data sovereignty có thể self-host thay vì qua OpenRouter. Giá tính theo token, scan càng lớn bill càng cao; nhưng với range $1-5 per product, cost khó là blocker.

Cảnh báo thực dụng: LLM có thể hallucinate finding. Mọi vuln K2.6 báo ra phải có human security engineer verify với PoC. Đừng auto-file CVE từ output raw.

What's next

Hướng phát triển logic: mở rộng reversing sang Java, Go, Rust binaries; pipeline finding thẳng vào Jira/GitHub Issue; agent swarm parallel scan nhiều binary cùng lúc (K2.6 đã hỗ trợ 300 sub-agents). Với giá và tốc độ như demo này, câu hỏi không còn là "có nên scan binary đó không" mà là "tại sao chưa scan?".

Nguồn: Dreadnode (X), dreadnode/example-agents, Dreadnode v2 launch, MarkTechPost — Kimi K2.6.