Every CVE Search/ Get API key

CVE-2026-48758

sigstore-js: DSSE payloadType type-binding failure

5.4 MediumFix available

sigstore-js provides JavaScript libraries for interacting with Sigstore services. Prior to 3.2.1, the preAuthEncoding function in @sigstore/core uses Node.js ascii encoding when converting the PAE string to bytes, allowing payloadType to be mutated after signing without invalidating the signature and breaking the type-binding guarantee that DSSE is designed to provide. This issue is fixed in version 3.2.1.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
Low
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
Low
Availability
Low

Exploit likelihood

0.24%Unchanged since Jul 15, 2026
90%50%10%1%

What each source reports

CVE List Score used 5.4

sigstore-js: DSSE payloadType type-binding failure

sigstore-js provides JavaScript libraries for interacting with Sigstore services. Prior to 3.2.1, the preAuthEncoding function in @sigstore/core uses Node.js ascii encoding when converting the PAE string to bytes, allowing payloadType to be mutated after signing without invalidating the signature and breaking the type-binding guarantee that DSSE is designed to provide. This issue is fixed in version 3.2.1.

Record
CVE-2026-48758
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-347
Updated
2026-11-02
EUVDEUVD-2026-44501 5.4

sigstore-js provides JavaScript libraries for interacting with Sigstore services. Prior to 3.2.1, the preAuthEncoding function in @sigstore/core uses Node.js ascii encoding when converting the PAE string to bytes, allowing payloadType to be mutated after signing without invalidating the signature and breaking the type-binding guarantee that DSSE is designed to provide. This issue is fixed in version 3.2.1.

Record
EUVD-2026-44501
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Updated
2026-11-02
GitHub AdvisoriesGHSA-jfc7-64v2-mr8c 5.4

@sigstore/core has DSSE payloadType type-binding failure

Impact

The preAuthEncoding function in @sigstore/core uses Node.js 'ascii' encoding when converting the PAE (Pre-Authentication Encoding) string to bytes. This allows payloadType to be mutated after signing without invalidating the signature, breaking the type-binding guarantee that DSSE is designed to provide.

In packages/core/src/dsse.ts, the PAE function builds a string containing payloadType and then encodes it with Buffer.from(prefix, 'ascii').

In Node.js, 'ascii' encoding for string-to-Buffer is equivalent to 'latin1', which truncates characters above U+00FF to their low byte. This means for any ASCII character, there exist Unicode characters (at U+01xx, U+02xx, etc.) that produce the identical encoded byte:

| Original | Codepoint | Mutant | Codepoint | Encoded byte | |----------|-----------|--------|-----------|--------------| | t | U+0074 | Ŵ | U+0174 | 0x74 | | e | U+0065 | ť | U+0165 | 0x65 |

An attacker can substitute every character in payloadType with a Unicode variant whose low byte matches, producing identical PAE bytes and a passing signature verification.

Additionally, payloadType.length returns the JavaScript string length (UTF-16 code units) rather than the UTF-8 byte length required by the DSSE spec, though this is only a contributing factor for non-ASCII types.

Reproduction

const { preAuthEncoding } = require('@sigstore/core/dist/dsse.js');
const payload = Buffer.from('hello world');

const original = preAuthEncoding('text/plain', payload);
// U+01xx chars whose low bytes match the original ASCII chars
const mutant = preAuthEncoding('\u0174\u0165\u0178\u0174/\u0170\u016c\u0161\u0169\u016e', payload);

console.log('PAE bytes equal:', original.equals(mutant)); // true — should be false
Record
GHSA-jfc7-64v2-mr8c
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-347
Updated
2026-11-02
NVD 5.4

sigstore-js provides JavaScript libraries for interacting with Sigstore services. Prior to 3.2.1, the preAuthEncoding function in @sigstore/core uses Node.js ascii encoding when converting the PAE string to bytes, allowing payloadType to be mutated after signing without invalidating the signature and breaking the type-binding guarantee that DSSE is designed to provide. This issue is fixed in version 3.2.1.

Record
CVE-2026-48758
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-347
Updated
2026-11-02
OSV 5.4

sigstore-js: DSSE payloadType type-binding failure

sigstore-js provides JavaScript libraries for interacting with Sigstore services. Prior to 3.2.1, the preAuthEncoding function in @sigstore/core uses Node.js ascii encoding when converting the PAE string to bytes, allowing payloadType to be mutated after signing without invalidating the signature and breaking the type-binding guarantee that DSSE is designed to provide. This issue is fixed in version 3.2.1.

Record
CVE-2026-48758
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-347
Updated
2026-11-02
OSVGHSA-jfc7-64v2-mr8c 5.4

@sigstore/core has DSSE payloadType type-binding failure

Impact

The preAuthEncoding function in @sigstore/core uses Node.js 'ascii' encoding when converting the PAE (Pre-Authentication Encoding) string to bytes. This allows payloadType to be mutated after signing without invalidating the signature, breaking the type-binding guarantee that DSSE is designed to provide.

In packages/core/src/dsse.ts, the PAE function builds a string containing payloadType and then encodes it with Buffer.from(prefix, 'ascii').

In Node.js, 'ascii' encoding for string-to-Buffer is equivalent to 'latin1', which truncates characters above U+00FF to their low byte. This means for any ASCII character, there exist Unicode characters (at U+01xx, U+02xx, etc.) that produce the identical encoded byte:

| Original | Codepoint | Mutant | Codepoint | Encoded byte | |----------|-----------|--------|-----------|--------------| | t | U+0074 | Ŵ | U+0174 | 0x74 | | e | U+0065 | ť | U+0165 | 0x65 |

An attacker can substitute every character in payloadType with a Unicode variant whose low byte matches, producing identical PAE bytes and a passing signature verification.

Additionally, payloadType.length returns the JavaScript string length (UTF-16 code units) rather than the UTF-8 byte length required by the DSSE spec, though this is only a contributing factor for non-ASCII types.

Reproduction

const { preAuthEncoding } = require('@sigstore/core/dist/dsse.js');
const payload = Buffer.from('hello world');

const original = preAuthEncoding('text/plain', payload);
// U+01xx chars whose low bytes match the original ASCII chars
const mutant = preAuthEncoding('\u0174\u0165\u0178\u0174/\u0170\u016c\u0161\u0169\u016e', payload);

console.log('PAE bytes equal:', original.equals(mutant)); // true — should be false
Record
GHSA-jfc7-64v2-mr8c
CVSS 3.1
5.4 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-347
Updated
2026-11-02
Show 4 moreShow less
OSVCLSA-2026-1790597352 No score

TuxCare security update for 5 packages (1 CVE)

TuxCare rebuilt 5 packages to address 1 CVE. Fixed in 2.0.0-tuxcare.1.

Record
CLSA-2026-1790597352
Updated
2026-11-02
OSVCLSA-2026-1792603628 No score

TuxCare security update for @sigstore/core (1 CVE)

TuxCare rebuilt @sigstore/core to address 1 CVE. Fixed in 3.2.0-tuxcare.1.

Record
CLSA-2026-1792603628
Updated
2026-11-02
OSVCLSA-2026-1793143332 No score

TuxCare security update for @sigstore/sign (1 CVE)

TuxCare rebuilt @sigstore/sign to address 1 CVE. Fixed in 2.0.0-tuxcare.3.

Record
CLSA-2026-1793143332
Updated
2026-11-02
OSVROOT-APP-NPM-CVE-2026-48758 No score

CVE-2026-48758 in @rootio/sigstore__core - Patched by Root

Root has patched CVE-2026-48758 in the @rootio/sigstore__core package for Root:npm. Multiple fixed versions available.

Record
ROOT-APP-NPM-CVE-2026-48758
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
@sigstore/core
npm
through 3.2.0
3.2.1
@sigstore/bundle
TuxCare:npm
2.0.0-tuxcare.0 up to 2.0.0-tuxcare.1, plus listed versions
2.0.0
2.0.0-tuxcare.1
@sigstore/core
TuxCare:npm
2.0.0-tuxcare.0 up to 2.0.0-tuxcare.1, plus listed versions
2.0.0
2.0.0-tuxcare.1
@sigstore/sign
TuxCare:npm
2.0.0-tuxcare.0 up to 2.0.0-tuxcare.1, plus listed versions
2.0.0
2.0.0-tuxcare.1
@sigstore/tuf
TuxCare:npm
2.0.0-tuxcare.0 up to 2.0.0-tuxcare.1, plus listed versions
2.0.0
2.0.0-tuxcare.1
sigstore
TuxCare:npm
2.0.0-tuxcare.0 up to 2.0.0-tuxcare.1, plus listed versions
2.0.0
2.0.0-tuxcare.1
@sigstore/core
TuxCare:npm
3.2.0-tuxcare.0 up to 3.2.0-tuxcare.1, plus listed versions
3.2.0
3.2.0-tuxcare.1
@sigstore/sign
TuxCare:npm
2.0.0-tuxcare.0 up to 2.0.0-tuxcare.3, plus listed versions
2.0.0
2.0.0-tuxcare.3
@sigstore/core
npm
before 3.2.1
3.2.1
@rootio/sigstore__core
Root:npm
before 3.2.0-root.io.1
3.2.0-root.io.13.0.0-root.io.12.0.0-root.io.13.1.0-root.io.11.1.0-root.io.1
@sigstore/core
Root:npm
before 3.2.0-aikido.1
3.2.0-aikido.13.0.0-aikido.12.0.0-aikido.13.1.0-aikido.11.1.0-aikido.1

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-48758 is a medium vulnerability (CVSS 5.4) in Sigstore Sigstore-js, published June 26, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.24%, the 14th percentile. Fixed in @sigstore/core 3.2.1.

References

MoveEnter Open