Relyra SAML SignatureValue not cryptographically verified -> authentication bypass
Relyra is a strict-by-default SAML 2.0 Service Provider library for Elixir and Phoenix. Versions 1.0.0 and 1.1.0 accept forged SAML signatures because SignatureValue was not cryptographically verified before the library returned a successful authentication result. The XMLDSig trust boundary was incomplete as :public_key.verify over the exclusive-C14N canonicalized SignedInfo was not performed against the configured IdP certificate's public key, DigestValue was not recomputed over the canonicalized referenced element, and canonicalize/2 remained an unused passthrough in the signature-verification path. The result was a structure-only acceptance path where document shape and trust-source rejection could succeed without proving the signature bytes. A forged SignatureValue carrying an attacker-controlled NameID could be accepted as {:ok}. This issue has been fixed in version 1.2.0.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-49454
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 16:55 UTC · Revision 1
Source evidence
Relyra SAML SignatureValue not cryptographically verified -> authentication bypass
core-osv · Original sourcePublished 18 Jun 2026, 20:52 UTC
Relyra is a strict-by-default SAML 2.0 Service Provider library for Elixir and Phoenix. Versions 1.0.0 and 1.1.0 accept forged SAML signatures because SignatureValue was not cryptographically verified before the library returned a successful authentication result. The XMLDSig trust boundary was incomplete as :public_key.verify over the exclusive-C14N canonicalized SignedInfo was not performed against the configured IdP certificate's public key, DigestValue was not recomputed over the canonicalized referenced element, and canonicalize/2 remained an unused passthrough in the signature-verification path. The result was a structure-only acceptance path where document shape and trust-source rejection could succeed without proving the signature bytes. A forged SignatureValue carrying an attacker-controlled NameID could be accepted as {:ok}. This issue has been fixed in version 1.2.0.
osv:CVE-2026-49454
Complete source record
{
"id": "5169043eb2ce5ca5b1c1fcc827c649daf6caccf4a2d61508196bf8b51e7a749e",
"url": "https://osv.dev/vulnerability/CVE-2026-49454",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Relyra SAML SignatureValue not cryptographically verified -> authentication bypass",
"summary": "Relyra is a strict-by-default SAML 2.0 Service Provider library for Elixir and Phoenix. Versions 1.0.0 and 1.1.0 accept forged SAML signatures because SignatureValue was not cryptographically verified before the library returned a successful authentication result. The XMLDSig trust boundary was incomplete as :public_key.verify over the exclusive-C14N canonicalized SignedInfo was not performed against the configured IdP certificate's public key, DigestValue was not recomputed over the canonicalized referenced element, and canonicalize/2 remained an unused passthrough in the signature-verification path. The result was a structure-only acceptance path where document shape and trust-source rejection could succeed without proving the signature bytes. A forged SignatureValue carrying an attacker-controlled NameID could be accepted as {:ok}. This issue has been fixed in version 1.2.0.",
"evidence": "osv:CVE-2026-49454",
"products": [],
"severity": "critical",
"structured": {
"id": "CVE-2026-49454",
"aliases": [
"CVE-2026-49454",
"GHSA-jv46-xfwm-36j7"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/sztheory/relyra",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "09bd64728befb55f2c35dd272fb644e3cbe77e54"
},
{
"fixed": "2e456897af3158c175bb490ce7fc51d6241c8922"
},
{
"fixed": "8910200"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "1.0.0"
},
{
"fixed": "1.2.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StringRangeExpression"
},
{
"range": [
{
"fixed": "2e456897af3158c175bb490ce7fc51d6241c8922"
}
],
"source": "REFERENCES_COMMIT"
},
{
"range": [
{
"fixed": "8910200"
}
],
"source": "REFERENCES_COMMIT"
}
]
}
}
],
"versions": [
"v1.1.0",
"v1.0",
"v0.1"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-49454.json"
}
}
],
"modified": "2026-10-28T02:30:30.504630360Z",
"provider": "osv",
"references": [
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49454.json",
"https://github.com/szTheory/relyra/security/advisories/GHSA-jv46-xfwm-36j7",
"https://nvd.nist.gov/vuln/detail/CVE-2026-49454",
"https://github.com/szTheory/relyra/commit/2e456897af3158c175bb490ce7fc51d6241c8922",
"https://github.com/szTheory/relyra/commit/8910200"
],
"provider_metadata": {
"cwe_ids": [
"CWE-287",
"CWE-347"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49454.json"
}
},
"related_cves": [
{
"value": "CVE-2026-49454",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 497632,
"published_at": "2026-06-18T20:52:22.605+00:00"
}