<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>tuya on SecMate Blog</title><link>https://blog.secmate.dev/tags/tuya/</link><description>What we find. What we share.</description><generator>Hugo</generator><language>en-us</language><managingEditor>noreply@blog.secmate.dev//blog.secmate.dev/ (SecMate Team)</managingEditor><lastBuildDate>Tue, 25 Aug 2026 10:39:55 +0000</lastBuildDate><atom:link href="https://blog.secmate.dev/tags/tuya/index.xml" rel="self" type="application/rss+xml"/><item><title>Four Vulnerabilities in Tuya's Arduino TuyaOpen Framework</title><link>https://blog.secmate.dev/posts/tuya-arduino-tuyaopen-vulnerabilities-disclosure/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><dc:creator>Maxime Rossi Bellom</dc:creator><dc:creator>Ramtine Tofighi Shirazi</dc:creator><category>Security</category><category>Vulnerability Research</category><category>IoT</category><guid>https://blog.secmate.dev/posts/tuya-arduino-tuyaopen-vulnerabilities-disclosure/</guid><description>SecMate details CVE-2026-28519 through CVE-2026-28522 in Tuya's Arduino framework across DNS, UDP, Wi-Fi credential, and cloud-delivered data paths.</description><content:encoded><![CDATA[<p>Tuya is an IoT platform vendor. Its developer documentation describes a public-cloud platform for smart-device development, covering hardware development tools, app tools, cloud services, and smart-industry development <a href="#ref1">[1]</a>.</p>
<p>SecMate found four vulnerabilities in <a href="https://github.com/tuya/arduino-TuyaOpen" rel="noopener noreferrer" target="_blank">arduino-tuyaopen</a> <a href="#ref2">[2]</a>, Tuya&rsquo;s Arduino framework for connected devices. The issues affect DNS parsing, Tuya Data Point handling, Wi-Fi credential storage, and UDP packet reception: <code>CVE-2026-28519</code>, <code>CVE-2026-28521</code>, <code>CVE-2026-28520</code>, and <code>CVE-2026-28522</code>.</p>
<p>The bugs are in reusable framework libraries. They do not form one exploit chain, and the evidence does not support a claim that every TuyaOpen device is affected.</p>
<p>All four issues were fixed in commit <code>54ac201</code> on February 25, 2026 <a href="#ref6">[6]</a>. The fixes later shipped in the <code>1.2.1</code> release line <a href="#ref8">[8]</a>.</p>
<h2 id="vulnerability-map">Vulnerability Map</h2>
<table>
<thead>
<tr>
<th>Area</th>
<th>Vulnerability</th>
<th>CVE</th>
<th>Affected code</th>
<th>Reachability</th>
</tr>
</thead>
<tbody>
<tr>
<td>DNSServer</td>
<td>DNS QNAME heap overflow</td>
<td><a href="https://secmate.dev/disclosures/SECMATE-2026-0001?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=tuya-arduino-tuyaopen-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="tuya-arduino-tuyaopen-vulnerabilities-disclosure" data-post-category="security"><code>CVE-2026-28519</code></a></td>
<td><code>libraries/DNSServer/src/DNSServer.cpp</code></td>
<td>Same-network DNS input when firmware exposes <code>DNSServer</code></td>
</tr>
<tr>
<td>TuyaIoT</td>
<td>Out-of-bounds read in DP event helper</td>
<td><a href="https://secmate.dev/disclosures/SECMATE-2026-0002?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=tuya-arduino-tuyaopen-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="tuya-arduino-tuyaopen-vulnerabilities-disclosure" data-post-category="security"><code>CVE-2026-28521</code></a></td>
<td><code>libraries/TuyaIoT/src/TuyaIoT.cpp</code></td>
<td>API boundary; caller passes unchecked <code>index</code></td>
</tr>
<tr>
<td>WiFiMulti</td>
<td>Heap off-by-one in Wi-Fi credential storage</td>
<td><a href="https://secmate.dev/disclosures/SECMATE-2026-0004?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=tuya-arduino-tuyaopen-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="tuya-arduino-tuyaopen-vulnerabilities-disclosure" data-post-category="security"><code>CVE-2026-28520</code></a></td>
<td><code>libraries/WiFi/src/WiFiMulti.cpp</code></td>
<td>API boundary; application passes SSID or passphrase to <code>addAP()</code></td>
</tr>
<tr>
<td>WiFiUDP</td>
<td>Null-pointer dereference in UDP receive path</td>
<td><a href="https://secmate.dev/disclosures/SECMATE-2026-0003?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=tuya-arduino-tuyaopen-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="tuya-arduino-tuyaopen-vulnerabilities-disclosure" data-post-category="security"><code>CVE-2026-28522</code></a></td>
<td><code>libraries/WiFi/src/WiFiUdp.cpp</code></td>
<td>Incoming UDP traffic under low-memory conditions</td>
</tr>
</tbody>
</table>
<h2 id="affected-code-and-use-cases">Affected Code and Use Cases</h2>
<p>The vulnerable implementations referenced in this post are from public repository code around commit <code>eaec2c903e2e629f9c53da789c39e12ea226d0b2</code> <a href="#ref2">[2]</a>. Public history places the affected paths between August and November 2024, with fixes landing on February 25, 2026 <a href="#ref3">[3]</a> <a href="#ref4">[4]</a> <a href="#ref5">[5]</a> <a href="#ref6">[6]</a>.</p>
<p><code>arduino-tuyaopen</code> ships as an Arduino board package for targets including <code>t2</code>, <code>t3</code>, <code>t5</code>, <code>ln882h</code>, and <code>esp32</code> <a href="#ref2">[2]</a>. The relevant libraries are used for captive-portal DNS handling, UDP packet reception, Wi-Fi connection fallback, and Tuya cloud DP processing.</p>
<p>At a reachability level, the DNS and UDP issues are adjacent-network issues: the attacker must be on the same LAN or AP-side network path as the device. The WiFiMulti issue is a local Wi-Fi/provisioning issue: the device must consume attacker-controlled AP or Wi-Fi credential data. The TuyaIoT DP issue is a device-control-path issue: attacker-controlled DP event data must reach the device through the Tuya cloud path.</p>
<p>A product does not inherit all four attack paths by default. Exposure depends on whether the affected library is present in the firmware and connected to the corresponding attacker-controlled input.</p>
<h2 id="recommendations">Recommendations</h2>
<ul>
<li>Update <code>arduino-tuyaopen</code> to the <code>1.2.1</code> release line or later, or to a commit containing <code>54ac201</code>.</li>
<li>If TuyaOpen libraries were vendored into firmware, check whether the February 25, 2026 fixes are present.</li>
<li>If firmware exposes captive-portal DNS handling, reject malformed or oversized QNAME inputs before copying into fixed buffers.</li>
<li>If firmware uses <code>WiFiUDP</code>, test receive paths under allocation failure and low-memory conditions.</li>
<li>Treat Wi-Fi provisioning data and Tuya DP indexes as untrusted unless the application enforces bounds before calling framework helpers.</li>
</ul>
<h2 id="timeline">Timeline</h2>
<div style="position: relative; padding-left: 1.5rem; margin: 1.5rem 0;">
  <div style="position: absolute; left: 0.35rem; top: 0.5rem; bottom: 0.5rem; width: 2px; background: var(--color-border);"></div>
  <div style="position: relative; padding-bottom: 1.25rem;">
    <div style="position: absolute; left: -1.15rem; top: 0.35rem; width: 10px; height: 10px; border-radius: 50%; background: var(--color-accent); border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">February 22, 2026</div>
    <div style="color: var(--color-text);">SecMate reports four issues in <code>arduino-tuyaopen</code> to Tuya Security.</div>
  </div>
  <div style="position: relative; padding-bottom: 1.25rem;">
    <div style="position: absolute; left: -1.15rem; top: 0.35rem; width: 10px; height: 10px; border-radius: 50%; background: var(--color-text-secondary); border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">February 25, 2026</div>
    <div style="color: var(--color-text);">The public fix commit lands in <code>arduino-tuyaopen</code> <a href="#ref6">[6]</a>.</div>
  </div>
  <div style="position: relative; padding-bottom: 1.25rem;">
    <div style="position: absolute; left: -1.15rem; top: 0.35rem; width: 10px; height: 10px; border-radius: 50%; background: var(--color-text-secondary); border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">March 11, 2026</div>
    <div style="color: var(--color-text);">Tuya SRC announcement <a href="https://src.tuya.com/announcement/32">32</a> is available.</div>
  </div>
  <div style="position: relative;">
    <div style="position: absolute; left: -1.15rem; top: 0.35rem; width: 10px; height: 10px; border-radius: 50%; background: #22c55e; border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">March 12, 2026</div>
    <div style="color: var(--color-text);">SecMate publishes the four public disclosure pages linked in the vulnerability map.</div>
  </div>
</div>
<h2 id="takeaway">Takeaway</h2>
<p>The common issue is not Tuya cloud. It is memory safety in reusable firmware framework code. DNS helpers, UDP receive paths, Wi-Fi provisioning helpers, and cloud-event accessors often become part of product firmware.</p>
<p>The highest-confidence impacts are same-network memory corruption where the DNS helper is exposed, denial of service in UDP receive paths under low-memory conditions, and memory-safety failures in helper APIs that downstream firmware may treat as safe building blocks.</p>
<p>For the full list of our disclosures, see our disclosure page at <a href="https://secmate.dev/disclosures?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=tuya-arduino-tuyaopen-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="tuya-arduino-tuyaopen-vulnerabilities-disclosure" data-post-category="security">secmate.dev/disclosures</a>.</p>
<h2 id="references">References</h2>
<ul>
<li>
<p><a id="ref1"></a>[1] Tuya. &ldquo;Tuya Developer Platform.&rdquo; <a href="https://developer.tuya.com/en/docs/iot/introduction-of-tuya?id=K914joffendwh" rel="noopener noreferrer" target="_blank">Documentation</a></p>
</li>
<li>
<p><a id="ref2"></a>[2] Tuya. &ldquo;<code>arduino-tuyaopen</code> repository.&rdquo; <a href="https://github.com/tuya/arduino-TuyaOpen" rel="noopener noreferrer" target="_blank">Repository</a></p>
</li>
<li>
<p><a id="ref3"></a>[3] Tuya. &ldquo;<code>add ble&amp;wifi libraries</code> (<code>b6d68ec</code>, August 6, 2024).&rdquo; <a href="https://github.com/tuya/arduino-TuyaOpen/commit/b6d68ec1be2b67fd286a1d9f76d7d2a2a6041748" rel="noopener noreferrer" target="_blank">Commit</a></p>
</li>
<li>
<p><a id="ref4"></a>[4] Tuya. &ldquo;<code>add http mqtt</code> (<code>89be820</code>, November 21, 2024).&rdquo; <a href="https://github.com/tuya/arduino-TuyaOpen/commit/89be82061b5892546ffb61dec303f5c3985bdee8" rel="noopener noreferrer" target="_blank">Commit</a></p>
</li>
<li>
<p><a id="ref5"></a>[5] Tuya. &ldquo;<code>Update TuyaIoT libraries</code> (<code>53bf5bc</code>, August 27, 2024).&rdquo; <a href="https://github.com/tuya/arduino-TuyaOpen/commit/53bf5bcade07718a70737f55ece0481739f89e85" rel="noopener noreferrer" target="_blank">Commit</a></p>
</li>
<li>
<p><a id="ref6"></a>[6] Tuya. &ldquo;<code>Fix security issues</code> (<code>54ac201</code>, February 25, 2026).&rdquo; <a href="https://github.com/tuya/arduino-TuyaOpen/commit/54ac201c458d040af49d375514f291360acc9ff9" rel="noopener noreferrer" target="_blank">Commit</a></p>
</li>
<li>
<p><a id="ref7"></a>[7] Tuya SRC. &ldquo;Announcement 32.&rdquo; <a href="https://src.tuya.com/announcement/32" rel="noopener noreferrer" target="_blank">Announcement page</a></p>
</li>
<li>
<p><a id="ref8"></a>[8] Tuya. &ldquo;<code>1.2.0</code> to <code>1.2.1</code> comparison.&rdquo; <a href="https://github.com/tuya/arduino-TuyaOpen/compare/1.2.0...1.2.1" rel="noopener noreferrer" target="_blank">Repository diff</a></p>
</li>
</ul>
<hr>
<p><em>The SecMate Team</em></p>
]]></content:encoded><media:content url="https://blog.secmate.dev/images/og_image.jpg" medium="image"/></item></channel></rss>