OpenBSD processes PAP in sppp_pap_input within sys/net/if_spppsubr.c. The name_len and passwd_len fields are taken directly from the peer-supplied PAP frame and used as the lengths for bcmp comparisons against the configured username and password. The existing check only rejects values above AUTHMAXLEN, so zero remains valid; bcmp with a length of zero succeeds without comparing data, preventing the authentication-failure branch from being taken and allowing the peer to receive a PAP_ACK without valid credentials.
The vulnerable path is reachable through PPPoE when the target is configured as a PAP authenticator. The same root cause also permits a supplied length larger than the allocation holding a stored credential, causing a kernel heap over-read. Public technical evidence confirms this out-of-bounds read, but does not establish a specific information-disclosure result beyond reading past the object boundary.