<?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>libcoap on SecMate Blog</title><link>https://blog.secmate.dev/tags/libcoap/</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/libcoap/index.xml" rel="self" type="application/rss+xml"/><item><title>How SecMate Discovered two Vulnerabilities in libcoap</title><link>https://blog.secmate.dev/posts/libcoap-vulnerabilities-disclosure/</link><pubDate>Wed, 14 Jan 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/libcoap-vulnerabilities-disclosure/</guid><description>SecMate details CVE-2025-34468 and CVE-2025-59391 in libcoap: an out-of-bounds write in address resolution and an OSCORE out-of-bounds read.</description><content:encoded><![CDATA[<p>We discovered two memory-safety issues in libcoap, a widely deployed IoT library. The first is an out-of-bounds write in a fixed buffer reachable via proxy requests that can crash servers with a single UDP packet. The second is an out-of-bounds read in OSCORE configuration parsing that can crash the parser on malformed input. Both vulnerabilities have amplified impact on the constrained embedded devices the library was built for.</p>
<h2 id="about-secmate">About SecMate</h2>
<p><a href="https://secmate.dev?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=libcoap-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_secmate" data-post-slug="libcoap-vulnerabilities-disclosure" data-post-category="security">SecMate</a> combines static analysis with AI to find security vulnerabilities in source code, specifically in embedded devices and low-level code.</p>
<p>So far, we have reported <strong>more than 60 vulnerabilities</strong> across embedded and systems projects, most still under <a href="https://secmate.dev/disclosures?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=libcoap-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="libcoap-vulnerabilities-disclosure" data-post-category="security">coordinated disclosure</a>.</p>
<p>Today, we are sharing two of our findings in libcoap (the first two CVEs uncovered with SecMate), a widely-used CoAP implementation for IoT devices.</p>
<h2 id="what-is-libcoap">What is libcoap?</h2>
<p>libcoap <a href="#ref1">[1]</a> is a C implementation of the Constrained Application Protocol (CoAP), standardized as RFC 7252 <a href="#ref2">[2]</a>. Think of CoAP as &ldquo;HTTP for IoT&rdquo;: a lightweight protocol for devices that can&rsquo;t afford the overhead of full HTTP/TCP stacks.</p>
<p>The library is mature and widely deployed:</p>
<ul>
<li>Supports multiple TLS backends (OpenSSL, GnuTLS, Mbed TLS, wolfSSL)</li>
<li>Runs on everything from Linux servers to ESP32 microcontrollers</li>
<li>Used in smart home devices, industrial sensors, and critical infrastructure</li>
</ul>
<p>Here is the catch: the devices running libcoap are often <em>constrained</em>. Limited memory, no MMU, no ASLR, no stack canaries. When you find a memory-safety issue in this context, the impact is amplified.</p>
<h2 id="vulnerability-1-static-buffer-overflow-in-address-resolution-cve-2025-34468-3ref3">Vulnerability #1: Static Buffer Overflow in Address Resolution (CVE-2025-34468 <a href="#ref3">[3]</a>)</h2>
<p><strong>Location</strong>: <code>coap_resolve_address_info()</code> in <code>src/coap_address.c</code></p>
<h3 id="the-bug">The Bug</h3>
<p>This vulnerability affects libcoap servers running in <strong>proxy mode</strong>. The vulnerable function resolves hostnames for CoAP proxy requests, copying the hostname into a fixed 256-byte static buffer without checking the length:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">static</span> <span class="kt">char</span> <span class="n">addrstr</span><span class="p">[</span><span class="mi">256</span><span class="p">];</span>  <span class="c1">// Fixed-size static buffer
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="c1"></span><span class="nf">memset</span><span class="p">(</span><span class="n">addrstr</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">addrstr</span><span class="p">));</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="n">address</span> <span class="o">&amp;&amp;</span> <span class="n">address</span><span class="o">-&gt;</span><span class="n">length</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="nf">memcpy</span><span class="p">(</span><span class="n">addrstr</span><span class="p">,</span> <span class="n">address</span><span class="o">-&gt;</span><span class="n">s</span><span class="p">,</span> <span class="n">address</span><span class="o">-&gt;</span><span class="n">length</span><span class="p">);</span>  <span class="c1">// No bounds check!
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="c1"></span><span class="k">else</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">    <span class="nf">memcpy</span><span class="p">(</span><span class="n">addrstr</span><span class="p">,</span> <span class="s">&#34;localhost&#34;</span><span class="p">,</span> <span class="mi">9</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="nf">getaddrinfo</span><span class="p">(</span><span class="n">addrstr</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">hints</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">res</span><span class="p">);</span>
</span></span></code></pre></div><p>The <code>address-&gt;length</code> field comes directly from parsing CoAP options. An attacker controls this value.</p>
<h3 id="the-attack">The Attack</h3>
<p>When a CoAP server runs in proxy mode, it accepts <code>Proxy-Uri</code> options that specify where to forward requests. The hostname from this URI flows directly into the vulnerable <code>memcpy()</code>:</p>
<ol>
<li>A CoAP request arrives with a <code>Proxy-Uri</code> option containing an oversized hostname (&gt;256 bytes)</li>
<li>The proxy extracts the hostname and passes it to <code>coap_resolve_address_info()</code></li>
<li>The function calls <code>memcpy(addrstr, address-&gt;s, address-&gt;length)</code> without bounds checking</li>
<li>The fixed-size buffer overflows, corrupting adjacent memory</li>
<li>The server crashes or misbehaves; the exact impact depends on layout and mitigations</li>
</ol>
<h3 id="impact">Impact</h3>
<p>On a standard Linux system, this bug is likely to crash the server (Denial of Service). On embedded devices without memory protection, memory corruption can have broader consequences, but practical exploitation depends on layout and mitigations. One UDP packet, no authentication required when proxy mode is enabled.</p>
<h2 id="vulnerability-2-out-of-bounds-read-in-oscore-parsing-cve-2025-59391-4ref4">Vulnerability #2: Out-of-Bounds Read in OSCORE Parsing (CVE-2025-59391 <a href="#ref4">[4]</a>)</h2>
<p><strong>Location</strong>: <code>get_split_entry()</code> in <code>src/coap_oscore.c</code></p>
<h3 id="the-bug-1">The Bug</h3>
<p>OSCORE (Object Security for Constrained RESTful Environments) is a security layer for CoAP. libcoap parses OSCORE configuration files that include boolean fields. The parsing code uses <code>memcmp()</code> with a user-controlled length:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">case</span> <span class="nl">COAP_ENC_BOOL</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nf">memcmp</span><span class="p">(</span><span class="s">&#34;true&#34;</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">-</span> <span class="n">begin</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">        <span class="n">value</span><span class="o">-&gt;</span><span class="n">u</span><span class="p">.</span><span class="n">value_int</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="k">else</span> <span class="nf">if</span> <span class="p">(</span><span class="nf">memcmp</span><span class="p">(</span><span class="s">&#34;false&#34;</span><span class="p">,</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">-</span> <span class="n">begin</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">        <span class="n">value</span><span class="o">-&gt;</span><span class="n">u</span><span class="p">.</span><span class="n">value_int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span></code></pre></div><p>The problem: <code>end - begin</code> comes from the configuration file. If an attacker provides a value like <code>trueAAAAAAAA...</code> (thousands of characters), the <code>memcmp()</code> reads past the static string <code>&quot;true&quot;</code> into adjacent memory.</p>
<h3 id="impact-1">Impact</h3>
<p>This issue requires the ability to provide malicious OSCORE configuration input, which is typically a local or trusted provisioning path rather than a network-facing vector. The realistic outcome is a crash or parse failure on malformed configs.</p>
<h3 id="theoretical-oracle-attack">Theoretical Oracle Attack</h3>
<p>In theory, if a local attacker could repeatedly provide different config files and observe success/failure signals from the parser, they could use this as an oracle to infer adjacent <code>.rodata</code> bytes one at a time. The diagram below illustrates what such an attack would look like:</p>
<svg viewBox="0 0 440 100" style="width: 100%; max-width: 440px; height: auto; margin: 1.5rem auto; display: block; font-family: monospace;">
  <style>
    .svg-label { fill: var(--color-text-secondary); }
    .svg-bg { fill: var(--color-muted-bg); stroke: var(--color-border); }
    .svg-known { fill: color-mix(in srgb, var(--color-accent) 30%, var(--color-bg-card)); stroke: var(--color-accent); }
    .svg-unknown { fill: var(--color-bg-card); stroke: var(--color-border); }
    .svg-text { fill: var(--color-text); }
    .svg-text-muted { fill: var(--color-text-secondary); }
  </style>
  <text x="220" y="14" text-anchor="middle" class="svg-label" font-size="11">memory layout</text>
  <rect x="10" y="22" width="420" height="44" rx="4" class="svg-bg" stroke-width="1"/>
  <rect x="15" y="26" width="36" height="36" rx="3" class="svg-known" stroke-width="2"/><text x="33" y="50" text-anchor="middle" class="svg-text" font-size="15">t</text>
  <rect x="56" y="26" width="36" height="36" rx="3" class="svg-known" stroke-width="2"/><text x="74" y="50" text-anchor="middle" class="svg-text" font-size="15">r</text>
  <rect x="97" y="26" width="36" height="36" rx="3" class="svg-known" stroke-width="2"/><text x="115" y="50" text-anchor="middle" class="svg-text" font-size="15">u</text>
  <rect x="138" y="26" width="36" height="36" rx="3" class="svg-known" stroke-width="2"/><text x="156" y="50" text-anchor="middle" class="svg-text" font-size="15">e</text>
  <rect x="179" y="26" width="36" height="36" rx="3" class="svg-known" stroke-width="2"/><text x="197" y="50" text-anchor="middle" class="svg-text" font-size="12">\0</text>
  <rect x="220" y="26" width="36" height="36" rx="3" class="svg-unknown" stroke-width="1"><animate attributeName="fill" values="var(--color-bg-card);#7f1d1d;#166534;#166534;#166534;#166534" dur="6s" repeatCount="indefinite"/><animate attributeName="stroke" values="var(--color-border);#dc2626;#22c55e;#22c55e;#22c55e;#22c55e" dur="6s" repeatCount="indefinite"/></rect>
  <text x="238" y="50" text-anchor="middle" class="svg-text-muted" font-size="15"><animate attributeName="opacity" values="1;1;0;0;0;0" dur="6s" repeatCount="indefinite"/>?</text>
  <text x="238" y="50" text-anchor="middle" class="svg-text" font-size="15"><animate attributeName="opacity" values="0;0;1;1;1;1" dur="6s" repeatCount="indefinite"/>f</text>
  <rect x="261" y="26" width="36" height="36" rx="3" class="svg-unknown" stroke-width="1"><animate attributeName="fill" values="var(--color-bg-card);var(--color-bg-card);var(--color-bg-card);#7f1d1d;#166534;#166534" dur="6s" repeatCount="indefinite"/><animate attributeName="stroke" values="var(--color-border);var(--color-border);var(--color-border);#dc2626;#22c55e;#22c55e" dur="6s" repeatCount="indefinite"/></rect>
  <text x="279" y="50" text-anchor="middle" class="svg-text-muted" font-size="15"><animate attributeName="opacity" values="1;1;1;1;0;0" dur="6s" repeatCount="indefinite"/>?</text>
  <text x="279" y="50" text-anchor="middle" class="svg-text" font-size="15"><animate attributeName="opacity" values="0;0;0;0;1;1" dur="6s" repeatCount="indefinite"/>a</text>
  <rect x="302" y="26" width="36" height="36" rx="3" class="svg-unknown" stroke-width="1"/><text x="320" y="50" text-anchor="middle" class="svg-text-muted" font-size="15">?</text>
  <rect x="343" y="26" width="36" height="36" rx="3" class="svg-unknown" stroke-width="1"/><text x="361" y="50" text-anchor="middle" class="svg-text-muted" font-size="15">?</text>
  <rect x="384" y="26" width="36" height="36" rx="3" class="svg-unknown" stroke-width="1"/><text x="402" y="50" text-anchor="middle" class="svg-text-muted" font-size="15">?</text>
  <text x="135" y="88" text-anchor="start" font-size="15" font-weight="bold" class="svg-label">true\0</text>
  <text x="200" y="88" text-anchor="start" font-size="15" font-weight="bold" class="svg-label"><animate attributeName="opacity" values="1;0;0;0;0;0" dur="6s" calcMode="discrete" repeatCount="indefinite"/>...</text>
  <text x="200" y="88" text-anchor="start" font-size="15" font-weight="bold" fill="#dc2626"><animate attributeName="opacity" values="0;1;0;0;0;0" dur="6s" calcMode="discrete" repeatCount="indefinite"/>Y ✗</text>
  <text x="200" y="88" text-anchor="start" font-size="15" font-weight="bold" fill="#22c55e"><animate attributeName="opacity" values="0;0;1;0;0;0" dur="6s" calcMode="discrete" repeatCount="indefinite"/>f ✓</text>
  <text x="200" y="88" text-anchor="start" font-size="15" font-weight="bold" fill="#dc2626"><animate attributeName="opacity" values="0;0;0;1;0;0" dur="6s" calcMode="discrete" repeatCount="indefinite"/>fK ✗</text>
  <text x="200" y="88" text-anchor="start" font-size="15" font-weight="bold" fill="#22c55e"><animate attributeName="opacity" values="0;0;0;0;1;0" dur="6s" calcMode="discrete" repeatCount="indefinite"/>fa ✓</text>
  <text x="200" y="88" text-anchor="start" font-size="15" font-weight="bold" fill="#22c55e"><animate attributeName="opacity" values="0;0;0;0;0;1" dur="6s" calcMode="discrete" repeatCount="indefinite"/>fa</text>
</svg>
<p>However, this attack is impractical: OSCORE configuration is loaded from local files, so an attacker would need repeated local access to provide different config files and observe results. At that point, they likely have access that makes this leak scenario moot.</p>
<blockquote class="admonition admonition-insight">
<strong>Why This Bug is Easy to Miss</strong>
<p>This vulnerability is subtle: the out-of-bounds read in <code>memcmp()</code> may not crash or produce obvious symptoms during normal operation. Spotting it requires reasoning about how data flows through multiple operations, something traditional static analysis tools typically miss.</p>
</blockquote>
<h2 id="the-embedded-security-challenge">The Embedded Security Challenge</h2>
<p>Both vulnerabilities share a common theme: <strong>they are worse on the devices libcoap is designed for</strong>.</p>
<p>Desktop and server systems have decades of hardening:</p>
<ul>
<li>ASLR randomizes memory layout</li>
<li>Stack canaries detect buffer overflows</li>
<li>DEP/NX prevents code execution from data segments</li>
<li>Sandboxing limits blast radius</li>
</ul>
<p>Constrained embedded devices often have none of these. A microcontroller running FreeRTOS or bare metal has:</p>
<ul>
<li>Flat, predictable memory layout</li>
<li>No memory protection unit (MPU) or it is disabled for performance</li>
<li>No operating system to enforce isolation</li>
<li>Direct hardware access for any code that runs</li>
</ul>
<p>This isn&rsquo;t a criticism of libcoap. It is the reality of their target environment. But it means bugs like these deserve extra scrutiny.</p>
<blockquote class="admonition admonition-insight">
<strong>Key Insight</strong>
<p>When auditing code for constrained devices, assume the worst-case exploitation scenario. Mitigations you take for granted on desktop systems simply don't exist.</p>
</blockquote>
<h2 id="disclosure-and-fix">Disclosure and Fix</h2>
<p>We reported both vulnerabilities to the libcoap maintainers through coordinated disclosure. The team responded quickly and professionally, and fixes are now available in version 4.3.5a.</p>
<h3 id="disclosure-timeline">Disclosure Timeline</h3>
<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;">Sep 3, 2025</div>
    <div style="color: var(--color-text);">SecMate reported OSCORE out-of-bounds read to libcoap security team</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;">Sep 3, 2025</div>
    <div style="color: var(--color-text);">Maintainer acknowledged and confirmed the issue is reproducible</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-accent); border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">Sep 10, 2025</div>
    <div style="color: var(--color-text);">SecMate reported static buffer overflow to libcoap security team</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;">Sep 10, 2025</div>
    <div style="color: var(--color-text);">Maintainer acknowledged the second vulnerability</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: #22c55e; border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">Sep 15, 2025</div>
    <div style="color: var(--color-text);">Fix for OSCORE issue merged (<a href="https://github.com/obgm/libcoap/pull/1730">PR #1730</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: #22c55e; border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">Sep 15, 2025</div>
    <div style="color: var(--color-text);">Fix for static buffer overflow merged (<a href="https://github.com/obgm/libcoap/pull/1737">PR #1737</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;">Sep 15, 2025</div>
    <div style="color: var(--color-text);">CVE requests submitted to MITRE for both issues</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: #22c55e; border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">Nov 27, 2025</div>
    <div style="color: var(--color-text);">libcoap v4.3.5a released with patches for both vulnerabilities</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: #f59e0b; border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">Dec 8, 2025</div>
    <div style="color: var(--color-text);">CVE-2025-59391 assigned by MITRE <span style="color: var(--color-text-secondary);">(85 days after request)</span></div>
  </div>
  <div style="position: relative;">
    <div style="position: absolute; left: -1.15rem; top: 0.35rem; width: 10px; height: 10px; border-radius: 50%; background: #f59e0b; border: 2px solid var(--color-bg);"></div>
    <div style="font-size: 0.75rem; color: var(--color-text-secondary); font-weight: 600;">Dec 31, 2025</div>
    <div style="color: var(--color-text);">CVE-2025-34468 assigned by <a href="https://vulncheck.com/">VulnCheck</a> <span style="color: var(--color-text-secondary);">(same day, MITRE never responded)</span></div>
  </div>
</div>
<p>We want to thank the libcoap team, particularly Jon Shallow, for their responsiveness in addressing these issues. The maintainer responded on the same day for both reports. Maintaining open-source security infrastructure is often thankless work, and their quick turnaround made the ecosystem safer.</p>
<h2 id="whats-next">What&rsquo;s Next</h2>
<p>These two CVEs are just a sample of what SecMate has found. We&rsquo;re continuing to analyze embedded codebases and report vulnerabilities through coordinated disclosure.</p>
<p>If you&rsquo;re curious about our other findings, check out our <a href="https://secmate.dev/disclosures?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=libcoap-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_disclosures" data-post-slug="libcoap-vulnerabilities-disclosure" data-post-category="security">disclosure page</a>. And if you&rsquo;re building embedded systems and want to find vulnerabilities before attackers do, <a href="https://secmate.dev/register?utm_source=blog&amp;utm_medium=body&amp;utm_campaign=libcoap-vulnerabilities-disclosure&amp;utm_content=security" rel="noopener noreferrer" target="_blank" data-cta-type="body_register" data-post-slug="libcoap-vulnerabilities-disclosure" data-post-category="security">reach out</a>.</p>
<h2 id="references">References</h2>
<ul>
<li>
<p><a id="ref1"></a>[1] libcoap. &ldquo;libcoap - C-Implementation of CoAP&rdquo; <em>GitHub</em>. <a href="https://github.com/obgm/libcoap" rel="noopener noreferrer" target="_blank">Repository</a></p>
</li>
<li>
<p><a id="ref2"></a>[2] IETF. &ldquo;RFC 7252 - The Constrained Application Protocol (CoAP)&rdquo; <em>IETF Datatracker</em>, June 2014. <a href="https://datatracker.ietf.org/doc/html/rfc7252" rel="noopener noreferrer" target="_blank">RFC</a></p>
</li>
<li>
<p><a id="ref3"></a>[3] NVD. &ldquo;CVE-2025-34468 - Static Buffer Overflow in libcoap&rdquo; <em>National Vulnerability Database</em>. <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-34468" rel="noopener noreferrer" target="_blank">CVE</a></p>
</li>
<li>
<p><a id="ref4"></a>[4] NVD. &ldquo;CVE-2025-59391 - Out-of-Bounds Read in libcoap&rdquo; <em>National Vulnerability Database</em>. <a href="https://nvd.nist.gov/vuln/detail/CVE-2025-59391" rel="noopener noreferrer" target="_blank">CVE</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>