CVE-2026-28490
Authlib Vulnerable to JWE RSA1_5 Bleichenbacher Padding Oracle
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
8.3
Authlib Vulnerable to JWE RSA1_5 Bleichenbacher Padding Oracle
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
CVE-2026-28490- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-203, CWE-327
- Updated
- 2026-11-02
EUVDEUVD-2026-12480
8.3
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
EUVD-2026-12480- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-7432-952r-cw78
8.3
Authlib Vulnerable to JWE RSA1_5 Bleichenbacher Padding Oracle
1. Executive Summary
A cryptographic padding oracle vulnerability was identified in the Authlib Python library
concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management
algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring
explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that
the underlying cryptography library implements correctly.
When cryptography encounters an invalid PKCS#1 v1.5 padding, it returns a randomized
byte string instead of raising an exception — the correct behavior per RFC 3218 §2.3.2.
Authlib ignores this contract and raises ValueError('Invalid "cek" length') immediately
after decryption, before reaching AES-GCM tag validation. This creates a clean, reliable
Exception Oracle:
- Invalid padding →
cryptographyreturns random bytes → Authlib length check fails →ValueError: Invalid "cek" length - Valid padding, wrong MAC → decryption succeeds → length check passes → AES-GCM
fails →
InvalidTag
This oracle is active by default in every Authlib installation without any special configuration by the developer or the attacker. The three most widely used Python web frameworks — Flask, Django, and FastAPI — all expose distinguishable HTTP responses for these two exception classes in their default configurations, requiring no additional setup to exploit.
Empirically confirmed on authlib 1.6.8 + cryptography 46.0.5:
[PADDING INVALIDO] ValueError: Invalid "cek" length
[PADDING VALIDO/MAC] InvalidTag
2. Technical Details & Root Cause
2.1 Vulnerable Code
File: authlib/jose/rfc7518/jwe_algs.py
def unwrap(self, enc_alg, ek, headers, key):
op_key = key.get_op_key("unwrapKey")
# cryptography implements Bleichenbacher mitigation here:
# on invalid padding it returns random bytes instead of raising.
# Empirically confirmed: returns 84 bytes for a 2048-bit key.
cek = op_key.decrypt(ek, self.padding)
# VULNERABILITY: This length check destroys the mitigation.
# cryptography returned 84 random bytes. len(84) * 8 = 672 != 128 (A128GCM CEK_SIZE).
# Authlib raises a distinct ValueError before AES-GCM is ever reached.
if len(cek) * 8 != enc_alg.CEK_SIZE:
raise ValueError('Invalid "cek" length') # <- ORACLE TRIGGER
return cek
2.2 Root Cause — Active Mitigation Destruction
cryptography 46.0.5 implements the Bleichenbacher mitigation correctly at the library
level. When PKCS#1 v1.5 padding validation fails, it does not raise an exception.
Instead it returns a randomized byte string (empirically observed: 84 bytes for a
2048-bit RSA key). The caller is expected to pass this fake key to the symmetric
decryptor, where MAC/tag validation will fail in constant time — producing an error
indistinguishable from a MAC failure on a valid padding.
Authlib does not honor this contract. The length check on the following line detects
that 84 bytes != 16 bytes (128-bit CEK for A128GCM) and raises ValueError('Invalid "cek" length') immediately. This exception propagates before AES-GCM is ever reached,
creating two execution paths with observable differences:
Path A — invalid PKCS#1 v1.5 padding:
op_key.decrypt() -> 84 random bytes (cryptography mitigation active)
len(84) * 8 = 672 != 128 (CEK_SIZE for A128GCM)
raise ValueError('Invalid "cek" length') <- specific exception, fast path
Path B — valid padding, wrong symmetric key:
op_key.decrypt() -> 16 correct bytes
len(16) * 8 = 128 == 128 -> length check passes
AES-GCM tag validation -> mismatch
raise InvalidTag <- different exception class, slow path
The single line raise ValueError('Invalid "cek" length') is the complete root cause.
Removing the raise and replacing it with a silent random CEK fallback eliminates both
the exception oracle and any…
- Record
GHSA-7432-952r-cw78- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-203, CWE-327
- Updated
- 2026-11-02
NVD
8.3
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
CVE-2026-28490- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N - Weakness
- CWE-203, CWE-327
- Updated
- 2026-11-02
OSV
8.3
Authlib Vulnerable to JWE RSA1_5 Bleichenbacher Padding Oracle
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
CVE-2026-28490- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-203, CWE-327
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-28490
6.5
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
DEBIAN-CVE-2026-28490- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-02
Show 7 moreShow less
OSVGHSA-7432-952r-cw78
8.3
Authlib Vulnerable to JWE RSA1_5 Bleichenbacher Padding Oracle
1. Executive Summary
A cryptographic padding oracle vulnerability was identified in the Authlib Python library
concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management
algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring
explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that
the underlying cryptography library implements correctly.
When cryptography encounters an invalid PKCS#1 v1.5 padding, it returns a randomized
byte string instead of raising an exception — the correct behavior per RFC 3218 §2.3.2.
Authlib ignores this contract and raises ValueError('Invalid "cek" length') immediately
after decryption, before reaching AES-GCM tag validation. This creates a clean, reliable
Exception Oracle:
- Invalid padding →
cryptographyreturns random bytes → Authlib length check fails →ValueError: Invalid "cek" length - Valid padding, wrong MAC → decryption succeeds → length check passes → AES-GCM
fails →
InvalidTag
This oracle is active by default in every Authlib installation without any special configuration by the developer or the attacker. The three most widely used Python web frameworks — Flask, Django, and FastAPI — all expose distinguishable HTTP responses for these two exception classes in their default configurations, requiring no additional setup to exploit.
Empirically confirmed on authlib 1.6.8 + cryptography 46.0.5:
[PADDING INVALIDO] ValueError: Invalid "cek" length
[PADDING VALIDO/MAC] InvalidTag
2. Technical Details & Root Cause
2.1 Vulnerable Code
File: authlib/jose/rfc7518/jwe_algs.py
def unwrap(self, enc_alg, ek, headers, key):
op_key = key.get_op_key("unwrapKey")
# cryptography implements Bleichenbacher mitigation here:
# on invalid padding it returns random bytes instead of raising.
# Empirically confirmed: returns 84 bytes for a 2048-bit key.
cek = op_key.decrypt(ek, self.padding)
# VULNERABILITY: This length check destroys the mitigation.
# cryptography returned 84 random bytes. len(84) * 8 = 672 != 128 (A128GCM CEK_SIZE).
# Authlib raises a distinct ValueError before AES-GCM is ever reached.
if len(cek) * 8 != enc_alg.CEK_SIZE:
raise ValueError('Invalid "cek" length') # <- ORACLE TRIGGER
return cek
2.2 Root Cause — Active Mitigation Destruction
cryptography 46.0.5 implements the Bleichenbacher mitigation correctly at the library
level. When PKCS#1 v1.5 padding validation fails, it does not raise an exception.
Instead it returns a randomized byte string (empirically observed: 84 bytes for a
2048-bit RSA key). The caller is expected to pass this fake key to the symmetric
decryptor, where MAC/tag validation will fail in constant time — producing an error
indistinguishable from a MAC failure on a valid padding.
Authlib does not honor this contract. The length check on the following line detects
that 84 bytes != 16 bytes (128-bit CEK for A128GCM) and raises ValueError('Invalid "cek" length') immediately. This exception propagates before AES-GCM is ever reached,
creating two execution paths with observable differences:
Path A — invalid PKCS#1 v1.5 padding:
op_key.decrypt() -> 84 random bytes (cryptography mitigation active)
len(84) * 8 = 672 != 128 (CEK_SIZE for A128GCM)
raise ValueError('Invalid "cek" length') <- specific exception, fast path
Path B — valid padding, wrong symmetric key:
op_key.decrypt() -> 16 correct bytes
len(16) * 8 = 128 == 128 -> length check passes
AES-GCM tag validation -> mismatch
raise InvalidTag <- different exception class, slow path
The single line raise ValueError('Invalid "cek" length') is the complete root cause.
Removing the raise and replacing it with a silent random CEK fallback eliminates both
the exception oracle and any…
- Record
GHSA-7432-952r-cw78- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-203, CWE-327
- Updated
- 2026-11-02
OSVPYSEC-2026-2116
6.5
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
PYSEC-2026-2116- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-02
OSVROOT-APP-PYPI-CVE-2026-28490
6.5
CVE-2026-28490 in Authlib - Patched by Root
Root has patched CVE-2026-28490 in the Authlib package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-28490- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-28490
8.3
Authlib is a Python library which builds OAuth and OpenID Connect servers. Prior to version 1.6.9, a cryptographic padding oracle vulnerability was identified in the Authlib Python library concerning the implementation of the JSON Web Encryption (JWE) RSA1_5 key management algorithm. Authlib registers RSA1_5 in its default algorithm registry without requiring explicit opt-in, and actively destroys the constant-time Bleichenbacher mitigation that the underlying cryptography library implements correctly. This issue has been patched in version 1.6.9.
- Record
UBUNTU-CVE-2026-28490- CVSS 4.0
- 8.3 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N - Updated
- 2026-11-02
OSVopenSUSE-SU-2026:20392-1 No score
Security update for python-Authlib
This update for python-Authlib fixes the following issues:
Changes in python-Authlib:
- CVE-2026-27962: JWS
deserialize_compact()allows for signature bypass by accepting user-controlled embedded JWK as verification key (bsc#1259738) - CVE-2026-28490: cryptographic padding oracle in JWE RSA1_5 key management algorithm (bsc#1259736)
- CVE-2026-28498: fail-open in behavior OIDC hash validation allows for bypass mandatory integrity protections (bsc#1259737)
- Record
openSUSE-SU-2026:20392-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:0975-1 No score
Security update for python-Authlib
This update for python-Authlib fixes the following issues:
- CVE-2026-27962: JWS
deserialize_compact()allows for signature bypass by accepting user-controlled embedded JWK as verification key (bsc#1259738). - CVE-2026-28490: cryptographic padding oracle in JWE RSA1_5 key management algorithm (bsc#1259736).
- CVE-2026-28498: fail-open in behavior OIDC hash validation allows for bypass mandatory integrity protections (bsc#1259737).
- Record
SUSE-SU-2026:0975-1- Updated
- 2026-11-02
OSVUSN-8557-1 No score
python-authlib vulnerabilities
Jay Neiva and Mauro Carrillo discovered that Authlib did not properly validate cryptographic keys embedded in JWT headers. An attacker could possibly use this issue to forge trusted tokens, resulting in authentication and authorization bypass. (CVE-2026-27962)
Jay Neiva and Mauro Carrillo discovered that Authlib incorrectly handled RSA1_5 encrypted tokens. An attacker could possibly use this issue to recover sensitive encrypted information, resulting in information disclosure. (CVE-2026-28490)
Jay Neiva and Mauro Carrillo discovered that Authlib did not properly reject unsupported cryptographic algorithms when validating OpenID Connect ID tokens. An attacker could possibly use this issue to bypass token integrity checks, resulting in authentication bypass. (CVE-2026-28498)
Johnny Deuss discovered that Authlib did not provide cross-site request forgery protection for the OAuth cache feature in its Starlette integration. An attacker could possibly use this issue to perform unauthorized OAuth actions, resulting in cross-site request forgery. This issue only affected Ubuntu 24.04 LTS and Ubuntu 26.04 LTS. (CVE-2026-41425)
- Record
USN-8557-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
authlibPyPI |
through 1.6.8 | 1.6.9 |
python-authlibDebian:12 |
before 1.2.0-1+deb12u2, plus listed versions 1.2.0-11.2.0-1+deb12u1 |
1.2.0-1+deb12u2 |
python-authlibDebian:13 |
All versions, plus listed versions 1.6.0-11.6.0-1+deb13u11.6.1-11.6.3-11.6.4-1 Show 8 moreShow less1.6.5-11.6.6-11.6.7-11.6.8-11.6.9-11.7.0-11.7.2-11.7.2-2 |
None known |
python-authlibDebian:14 |
before 1.6.9-1, plus listed versions 1.6.0-11.6.1-11.6.3-11.6.4-11.6.5-11.6.6-11.6.7-11.6.8-1 |
1.6.9-1 |
authlibPyPI |
before 1.6.9, plus listed versions 0.10.100.110.120.12.1 Show 45 moreShow less0.130.140.14.10.14.20.14.30.150.15.10.15.20.15.30.15.40.15.50.15.60.1rc00.20.2.10.30.40.4.10.50.5.10.60.70.80.91.0.01.0.0a11.0.0a21.0.0b11.0.0b21.0.0rc11.0.11.1.01.2.01.2.11.3.01.3.11.3.21.4.01.4.11.5.01.5.11.5.21.6.01.6.11.6.2 |
1.6.9 |
AuthlibRoot:PyPI |
before 0.15.5+aikido.9 | 0.15.5+aikido.91.6.6+aikido.51.6.6+aikido.61.6.6+aikido.71.6.6+aikido.8 |
rootio-AuthlibRoot:PyPI |
before 0.15.5+root.io.6 | 0.15.5+root.io.60.15.5+root.io.70.15.5+root.io.81.6.6+root.io.31.6.6+root.io.40.15.5+root.io.91.6.6+root.io.51.6.6+root.io.61.6.6+root.io.7 |
python-AuthlibSUSE:Linux Enterprise Module for Python 3 15 SP7 From an advisory covering 3 CVEs |
before 1.3.1-150600.3.17.1 | 1.3.1-150600.3.17.1 |
python-AuthlibSUSE:Linux Enterprise Server 15 SP6-LTSS From an advisory covering 3 CVEs |
before 1.3.1-150600.3.17.1 | 1.3.1-150600.3.17.1 |
python-AuthlibSUSE:Linux Enterprise Server for SAP Applications 15 SP6 From an advisory covering 3 CVEs |
before 1.3.1-150600.3.17.1 | 1.3.1-150600.3.17.1 |
Show 10 moreShow less
| Package | Affected | Fixed |
|---|---|---|
python-AuthlibopenSUSE:Leap 15.6 From an advisory covering 3 CVEs |
before 1.3.1-150600.3.17.1 | 1.3.1-150600.3.17.1 |
python-authlibUbuntu:Pro:22.04:LTS |
before 0.15.5-1ubuntu0.1~esm2, plus listed versions 0.15.4-10.15.5-10.15.5-1ubuntu0.1~esm1 |
0.15.5-1ubuntu0.1~esm2 |
python-authlibUbuntu:Pro:24.04:LTS |
before 1.3.0-1ubuntu0.1~esm2, plus listed versions 1.2.1-11.3.0-11.3.0-1ubuntu0.1~esm1 |
1.3.0-1ubuntu0.1~esm2 |
python-authlibUbuntu:25.10 |
All versions, plus listed versions 1.5.1-11.5.2-11.6.0-1 |
None known |
python-authlibUbuntu:26.10 |
All versions, plus listed versions 1.6.7-11.7.2-11.7.2-2 |
None known |
python-authlibUbuntu:Pro:26.04:LTS |
before 1.6.7-1ubuntu0.1~esm1, plus listed versions 1.6.0-11.6.5-11.6.6-11.6.7-1 |
1.6.7-1ubuntu0.1~esm1 |
python-authlibUbuntu:Pro:22.04:LTS From an advisory covering 4 CVEs |
before 0.15.5-1ubuntu0.1~esm2, plus listed versions 0.15.4-10.15.5-10.15.5-1ubuntu0.1~esm1 |
0.15.5-1ubuntu0.1~esm2 |
python-authlibUbuntu:Pro:24.04:LTS From an advisory covering 4 CVEs |
before 1.3.0-1ubuntu0.1~esm2, plus listed versions 1.2.1-11.3.0-11.3.0-1ubuntu0.1~esm1 |
1.3.0-1ubuntu0.1~esm2 |
python-authlibUbuntu:Pro:26.04:LTS From an advisory covering 4 CVEs |
before 1.6.7-1ubuntu0.1~esm1, plus listed versions 1.6.0-11.6.5-11.6.6-11.6.7-1 |
1.6.7-1ubuntu0.1~esm1 |
python-AuthlibopenSUSE:Leap 16.0 From an advisory covering 3 CVEs |
before 1.5.2-bp160.3.1 | 1.5.2-bp160.3.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-28490 is a high vulnerability (CVSS 8.3) in Authlib, published March 16, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.14%, the 3rd percentile. Fixed in authlib 1.6.9.
References
github.com/authlib/authlib/security/advisories/GHSA-7432-952r-cw78
github.com/authlib/authlib/commit/48b345f29f6c459f11c6a40162b6c0b742ef2e22
github.com/authlib/authlib/releases/tag/v1.6.9
nvd.nist.gov/vuln/detail/CVE-2026-28490
github.com/advisories/GHSA-7432-952r-cw78
github.com/CVEProject/cvelistV5/tree/main/cves/2026/28xxx/CVE-2026-28490.json
Show 15 moreShow less
security-tracker.debian.org/tracker/CVE-2026-28490
github.com/authlib/authlib
suse.com/support/update/announcement/2026/suse-su-20260975-1
bugzilla.suse.com/1259736
bugzilla.suse.com/1259737
bugzilla.suse.com/1259738
suse.com/security/cve/CVE-2026-27962
suse.com/security/cve/CVE-2026-28490
suse.com/security/cve/CVE-2026-28498
ubuntu.com/security/CVE-2026-28490
cve.org/CVERecord?id=CVE-2026-28490
ubuntu.com/security/notices/USN-8557-1
ubuntu.com/security/CVE-2026-27962
ubuntu.com/security/CVE-2026-28498
ubuntu.com/security/CVE-2026-41425
Left out here: 6 versions and the rest of 2 source descriptions. The JSON record has them.