{"id":"CVE-2026-104254","kind":"vulnerability","aliases":["CVE-2026-104254"],"related":[],"title":"liboqs: LMS signature verification can over-read memory and crash","description":"liboqs is a C-language cryptographic library that provides implementations of post-quantum cryptography algorithms. From 0.11.0 through 0.16.0, builds configured with OQS_ENABLE_SIG_STFL_LMS=ON can read beyond a caller-supplied signature buffer when an untrusted truncated LMS or HSS-LMS signature reaches OQS_SIG_STFL_verify or OQS_SIG_STFL_alg_lms_verify. In hss_validate_signature_init() in src/sig_stfl/lms/external/hss_verify_inc.c, consumed-length checks do not ensure that the bottom-level q and C fields remain available, allowing up to 32 bytes to be read past the buffer. In version 0.16.0, is_hss_public_key() also reads at offset 8 after only a four-byte length check, allowing an over-read of up to eight bytes. No valid signature is required, but the public key must be syntactically plausible. The read data is consumed only by an internal hash and is not exposed, so the supported impact is a possible verifier crash and denial of service, not memory disclosure or acceptance of an invalid signature. This issue is scheduled to be fixed in version 0.17.0.","summary":"liboqs builds with LMS/HSS stateful signatures enabled read up to 40 bytes past a caller-supplied signature or public key buffer when given a truncated signature. The read data is only hashed internally and not exposed, so the realistic impact is a verifier crash (denial of service) rather than data theft or a forged signature.","severity":"medium","cvss":5.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["c","hss","liboqs","lms","package","post-quantum"],"not_affected_if":["default-config","lms-disabled","trusted-input-only"],"how_to_check":"- Check whether the build sets `OQS_ENABLE_SIG_STFL_LMS=ON`.\n- Check the liboqs version in use; affected range is `0.11.0` through `0.16.0`.","fix":"- liboqs: move to `0.17.0` (the source says the fix is scheduled for this version; confirm it is released).","status":"open","published_at":"2026-11-06T22:17:50+00:00","first_seen_at":"2026-11-06T22:44:32+00:00","triaged_at":"2026-11-06T22:44:51+00:00","updated_at":"2026-11-06T22:44:51+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-06T22:44:51Z","model":"claude-haiku-5-5","output":{"fix":"- liboqs: move to `0.17.0` (the source says the fix is scheduled for this version; confirm it is released).","reach":"network","title":"liboqs: LMS signature verification can over-read memory and crash","impact":"low","summary":"liboqs builds with LMS/HSS stateful signatures enabled read up to 40 bytes past a caller-supplied signature or public key buffer when given a truncated signature. The read data is only hashed internally and not exposed, so the realistic impact is a verifier crash (denial of service) rather than data theft or a forged signature.","audience":"developers","category":"package","nicknames":[],"who_cares":["liboqs","post-quantum","c","lms","hss"],"confidence":0.7,"fix_status":"available","needs_auth":"no","worst_case":"verifier process crashes from a memory over-read","analyst_note":"","how_to_check":"- Check whether the build sets `OQS_ENABLE_SIG_STFL_LMS=ON`.\n- Check the liboqs version in use; affected range is `0.11.0` through `0.16.0`.","plain_action":"","needs_analyst":false,"not_affected_if":["default-config","lms-disabled","trusted-input-only"],"who_is_affected":"Only systems that link liboqs 0.11.0 through 0.16.0 built with LMS/HSS stateful signature support enabled and that verify untrusted LMS or HSS-LMS signatures. Builds with the option off, or that verify only trusted signatures, are not reachable by this path.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000735,"input_tokens":4555,"output_tokens":559,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-104254':14A,17A '-2026':13A,16A '0.11.0':100C '0.16.0':102C,181C '0.17.0':267C '32':171C '40':36B '8':190C 'accept':253C 'alg':140C 'algorithm':98C 'allow':168C,199C 'also':186C 'avail':167C 'beyond':114C 'bottom':160C 'bottom-level':159C 'buffer':47B,120C,178C 'build':27B,103C 'byte':37B,172C,196C,208C 'c':18B,86C,164C 'c-languag':85C 'caller':41B,117C 'caller-suppli':40B,116C 'check':153C,198C 'configur':104C 'consum':151C,226C 'consumed-length':150C 'crash':11A,70B,244C 'cryptograph':88C 'cryptographi':97C 'cve':12A,15A 'data':55B,76B,224C 'denial':71B,246C 'disclosur':251C 'eight':207C 'enabl':32B,107C 'ensur':156C 'expos':62B,235C 'field':165C 'fix':264C 'forg':80B 'four':195C 'four-byt':194C 'given':49B 'hash':58B,231C 'hss':19B,128C,144C,183C 'hss-lms':127C 'impact':66B,239C 'implement':92C 'init':147C 'intern':59B,230C 'invalid':256C 'issu':259C 'key':46B,185C,217C 'languag':87C 'length':152C,197C 'level':161C 'liboq':1A,20B,26B,82C 'librari':89C 'lms':2A,21B,110C,125C,129C,141C 'lms/hss':29B 'memori':9A,250C 'must':218C 'offset':189C 'oq':106C,132C,137C 'over-read':6A,201C 'packag':22B 'past':38B,176C 'plausibl':221C 'possibl':242C 'post':24B,95C 'post-quantum':23B,94C 'provid':91C 'public':45B,184C,216C 'q':162C 'quantum':25B,96C 'rather':74B 'reach':131C 'read':8A,33B,54B,113C,175C,187C,203C,223C 'realist':65B 'remain':166C 'requir':213C 'schedul':261C 'servic':73B,248C 'sig':108C,133C,138C 'signatur':3A,31B,43B,52B,81B,119C,130C,146C,211C,257C 'src/sig_stfl/lms/external/hss_verify_inc.c':149C 'state':30B 'stfl':109C,134C,139C 'suppli':42B,118C 'support':238C 'syntact':220C 'theft':77B 'truncat':51B,124C 'untrust':123C 'valid':145C,210C 'verif':4A 'verifi':69B,135C,142C,243C 'version':180C,266C","nicknames":[],"mitigations":[],"who_affected":"Only systems that link liboqs 0.11.0 through 0.16.0 built with LMS/HSS stateful signature support enabled and that verify untrusted LMS or HSS-LMS signatures. Builds with the option off, or that verify only trusted signatures, are not reachable by this path.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["c","hss","liboqs","lms","medium","package","postquantum"],"campaign_type":null,"search_a":"'-104254':14A,17A '-2026':13A,16A 'crash':11A 'cve':12A,15A 'liboq':1A 'lms':2A 'memori':9A 'over-read':6A 'read':8A 'signatur':3A 'verif':4A","search_b":"'40':36B 'buffer':47B 'build':27B 'byte':37B 'c':18B 'caller':41B 'caller-suppli':40B 'crash':70B 'data':55B,76B 'denial':71B 'enabl':32B 'expos':62B 'forg':80B 'given':49B 'hash':58B 'hss':19B 'impact':66B 'intern':59B 'key':46B 'liboq':20B,26B 'lms':21B 'lms/hss':29B 'packag':22B 'past':38B 'post':24B 'post-quantum':23B 'public':45B 'quantum':25B 'rather':74B 'read':33B,54B 'realist':65B 'servic':73B 'signatur':31B,43B,52B,81B 'state':30B 'suppli':42B 'theft':77B 'truncat':51B 'verifi':69B","search_c":"'0.11.0':100C '0.16.0':102C,181C '0.17.0':267C '32':171C '8':190C 'accept':253C 'alg':140C 'algorithm':98C 'allow':168C,199C 'also':186C 'avail':167C 'beyond':114C 'bottom':160C 'bottom-level':159C 'buffer':120C,178C 'build':103C 'byte':172C,196C,208C 'c':86C,164C 'c-languag':85C 'caller':117C 'caller-suppli':116C 'check':153C,198C 'configur':104C 'consum':151C,226C 'consumed-length':150C 'crash':244C 'cryptograph':88C 'cryptographi':97C 'data':224C 'denial':246C 'disclosur':251C 'eight':207C 'enabl':107C 'ensur':156C 'expos':235C 'field':165C 'fix':264C 'four':195C 'four-byt':194C 'hash':231C 'hss':128C,144C,183C 'hss-lms':127C 'impact':239C 'implement':92C 'init':147C 'intern':230C 'invalid':256C 'issu':259C 'key':185C,217C 'languag':87C 'length':152C,197C 'level':161C 'liboq':82C 'librari':89C 'lms':110C,125C,129C,141C 'memori':250C 'must':218C 'offset':189C 'oq':106C,132C,137C 'over-read':201C 'past':176C 'plausibl':221C 'possibl':242C 'post':95C 'post-quantum':94C 'provid':91C 'public':184C,216C 'q':162C 'quantum':96C 'reach':131C 'read':113C,175C,187C,203C,223C 'remain':166C 'requir':213C 'schedul':261C 'servic':248C 'sig':108C,133C,138C 'signatur':119C,130C,146C,211C,257C 'src/sig_stfl/lms/external/hss_verify_inc.c':149C 'stfl':109C,134C,139C 'suppli':118C 'support':238C 'syntact':220C 'truncat':124C 'untrust':123C 'valid':145C,210C 'verifi':135C,142C,243C 'version':180C,266C","first_public_at":"2026-09-22T15:58:13+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-104254","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-104254","severity":null,"published_at":"2026-11-06T22:17:50+00:00","modified_at":"2026-11-06T22:17:50+00:00","first_seen_at":"2026-11-06T22:44:32+00:00","fetched_at":"2026-11-06T22:44:32+00:00","note":null}],"documents":[{"id":90726,"url":"https://github.com/open-quantum-safe/liboqs/commit/df3eb80fe68d2e5db0ecf5d503082cd5699e0859","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":90727,"url":"https://github.com/open-quantum-safe/liboqs/security/advisories/GHSA-wh5q-mpc8-67wf","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-09-22T15:58:13+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}