☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Adguard logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N 🐛 CWE-330
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-47703

CVE-2026-47703 Supply Chain Attack in AdGuard Home
📅 PUBLISHED: 2026-07-15 16:03 UTC 🔄 UPDATED: 2026-09-26 06:08 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.12%
👁️
0.12% probability
3.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Country: Cyprus License: Open Source
Affected: Adguardhome — upgrade to patched release
CVSS VECTOR BREAKDOWN 5.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: L Integrity Low
A: N Availability None
5.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-47703 is a vulnerability in AdGuard Home, a network-wide ad and tracking blocker. The flaw resides in the client-triggered DNS-over-QUIC (DoQ) forwarding path when using a udp:// upstream. By forcing the generation of DNS transaction IDs (dns_id or txid) equal to zero, an attacker can exploit a quoted-port ICMP source-port oracle. This weakens DNS response matching for forwarded queries, potentially allowing an attacker to inject spoofed DNS responses. The vulnerability is fixed in version 0.107.75.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

AdGuard Home is distributed as a Go binary. The vulnerability is in the core DNS forwarding logic, not in a third-party package. Users should verify the integrity of the downloaded binary using the official checksums provided by AdGuard.

CVSS Breakdown & Threat Level

The CVSS score is not provided in the NVD data. However, based on the description, the vulnerability has the following characteristics:

  • Attack Vector (AV): Network (N) - The attack is initiated over the network.
  • Attack Complexity (AC): Low (L) - The attack does not require special conditions.
  • Privileges Required (PR): None (N) - No authentication is needed.
  • User Interaction (UI): None (N) - No user action is required.
  • Scope (S): Unchanged (U) - The vulnerable component is the DNS resolver.
  • Confidentiality (C): None (N) - No direct data exposure.
  • Integrity (I): High (H) - An attacker can inject false DNS responses.
  • Availability (A): None (N) - No direct denial of service.

Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N Estimated Base Score: 7.5 (High)

Deep Dive & Mechanics

The vulnerability is in the DoQ (DNS over QUIC) forwarding path. When AdGuard Home receives a DNS query from a client over DoQ and forwards it to an upstream udp:// resolver, it uses a specific transaction ID (dns_id or txid). Under certain conditions, this ID is set to zero.

The key issue is the "quoted-port ICMP source-port oracle." In UDP, the source port is used to match responses to queries. An attacker can send ICMP messages (e.g., ICMP Port Unreachable) that quote the original UDP packet, including the source port. By observing these ICMP messages, the attacker can learn the source port used by AdGuard Home for the forwarded query. Combined with the predictable transaction ID of zero, the attacker can forge a DNS response that matches the expected source port and transaction ID, allowing DNS cache poisoning.

The attack flow:

  1. Client sends a DoQ query to AdGuard Home.
  2. AdGuard Home forwards the query to a udp:// upstream with dns_id=0 and a specific source port.
  3. Attacker sends ICMP messages to the upstream server, quoting the source port.
  4. Attacker learns the source port and sends a forged DNS response with dns_id=0 and the correct source port.
  5. AdGuard Home accepts the forged response, poisoning its cache.

Vulnerable vs. Patched Code

The vulnerable code is in the DoQ forwarding logic. The fix ensures that transaction IDs are randomized and non-zero.

Vulnerable Code (Conceptual):

// In the DoQ handler
func forwardQuery(query *dns.Msg, upstream string) {
    // Set transaction ID to zero
    query.Id = 0
    // Send via UDP
    conn, _ := net.Dial("udp", upstream)
    conn.Write(query.Pack())
}

Patched Code (Conceptual):

// In the DoQ handler
func forwardQuery(query *dns.Msg, upstream string) {
    // Generate random transaction ID
    query.Id = rand.Uint16()
    // Ensure non-zero
    if query.Id == 0 {
        query.Id = 1
    }
    // Send via UDP
    conn, _ := net.Dial("udp", upstream)
    conn.Write(query.Pack())
}

Exploitation & Lab Setup

Red Team

Lab Setup:

  1. Install AdGuard Home version 0.107.74 on a Linux VM.
  2. Configure it to use a udp:// upstream (e.g., 8.8.8.8).
  3. Set up a client to send DoQ queries.
  4. Use a tool like scapy to send ICMP packets and forge DNS responses.

Exploitation Steps:

  1. Send a DoQ query to AdGuard Home for a domain like example.com.
  2. Observe the source port used by AdGuard Home for the forwarded UDP query.
  3. Send an ICMP Port Unreachable message to the upstream server (e.g., 8.8.8.8) with the quoted source port.
  4. Forge a DNS response with dns_id=0 and the correct source port, pointing example.com to a malicious IP.
  5. Verify that AdGuard Home caches the malicious response.

Example Scapy Script:

from scapy.all import *

# Assume we know the source port (e.g., 12345)
src_port = 12345
# Forged DNS response
dns_response = IP(dst="<AdGuard_IP>", src="8.8.8.8")/UDP(sport=53, dport=src_port)/DNS(
    id=0,
    qr=1,
    qd=DNSQR(qname="example.com"),
    an=DNSRR(rrname="example.com", rdata="1.2.3.4")
)
send(dns_response)

Blue Team

Detection:

  • Monitor for DNS queries with dns_id=0 in the forwarded traffic.
  • Monitor for ICMP messages that quote UDP source ports from AdGuard Home.
  • Use the Sigma rule below to detect anomalous DNS responses.

Mitigation:

  • Upgrade to version 0.107.75 immediately.
  • If upgrade is not possible, disable DoQ forwarding or use only DoT/DoH upstreams.
  • Implement network segmentation to limit exposure.

Indicators of Compromise (IOCs)

  • DNS queries with dns_id=0 in UDP traffic from AdGuard Home.
  • ICMP Port Unreachable messages quoting UDP source ports from AdGuard Home.
  • Unexpected DNS responses with dns_id=0 and matching source ports.
  • Log entries showing dns_id=0 in AdGuard Home logs.

Detection Engineering

YARA Rule

rule CVE_2026_47703_DNS_ID_Zero {
    meta:
        description = "Detects DNS packets with transaction ID set to zero, indicating potential exploitation of CVE-2026-47703"
        author = "Valters IT"
        date = "2026-01-01"
        reference = "CVE-2026-47703"
    strings:
        $dns_id_zero = { 00 00 } // DNS ID field set to 0x0000
    condition:
        $dns_id_zero at 0
}

Sigma Rule

title: CVE-2026-47703 - DNS Transaction ID Zero
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects DNS queries or responses with transaction ID set to zero, indicating potential exploitation of CVE-2026-47703
author: Valters IT
date: 2026/01/01
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2026-47703
logsource:
    category: dns
    product: suricata
detection:
    selection:
        dns.id: 0
    condition: selection
falsepositives:
    - Legitimate DNS queries with ID zero (rare)
level: high

Suricata Rule

alert udp any any -> any 53 (msg:"CVE-2026-47703 - DNS Transaction ID Zero"; dns.id:0; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade AdGuard Home to version 0.107.75 or later.
  2. If upgrade is not possible, disable DoQ forwarding or use only DoT/DoH upstreams.
  3. Monitor DNS traffic for transaction IDs equal to zero.

Long-term Measures:

  • Implement DNS response validation (e.g., DNSSEC).
  • Use network segmentation to isolate DNS infrastructure.
  • Regularly update all software components.

Valters IT Signature: This report was generated by Valters IT DevSecOps AI. For questions, contact support@valtersit.com.

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-47703/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.