chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285 - #1341

Closed
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4
Closed

chore: upgrade @opentelemetry/core to ^2.8.0 to address CVE-2026-54285#1341
linear-code[bot] wants to merge 2 commits into
mainfrom
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Conversation

@linear-code

Copy link
Copy Markdown
Contributor

Fixes SOU-1359

Addresses CVE-2026-54285 (unbounded memory allocation in W3C Baggage propagation, @opentelemetry/core < 2.8.0).

Refreshing the lockfile (yarn up -R @opentelemetry/core) bumped the caret-ranged requesters to 2.8.0, but several deep transitive packages under @sentry/node and posthog-js pin @opentelemetry/core to exact versions (2.0.1, 2.2.0, 2.5.0, 2.5.1). Since no single top-level bump covers all of these, qualified resolutions overrides pin each to ^2.8.0. All instances now resolve to 2.8.0 (verified via yarn why @opentelemetry/core --recursive).

linear-codeBot added 2 commits June 17, 2026 23:09
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
Co-authored-by: linear-code[bot] <222613912+linear-code[bot]@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

License Audit

❌ Audit failed to produce results. Check the workflow logs for details.

@brendan-kellam

Copy link
Copy Markdown
Contributor

@claude can you cross-validate that bumping the top level packages by either a patch or a minor would not solve this issue?

@claude

claudeBot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @brendan-kellam's task in 5m 2s —— View job


Cross-validation: can a top-level patch/minor bump avoid the resolutions overrides?

  • Identify top-level packages that pull in @opentelemetry/core
  • Trace the transitive chains to the pinned 2.0.1 / 2.2.0 / 2.5.0 / 2.5.1 versions
  • Check whether a patch/minor bump of each top-level package lifts those pins to ≥ 2.8.0
  • Report findings

Why the deep pins are sticky

Every blocked version comes from an OpenTelemetry package that pins @opentelemetry/core to an exact version internally (e.g. @opentelemetry/instrumentation-http@0.211.0"@opentelemetry/core": "npm:2.5.0", not ^2.5.0). So a given OTel package only stops pulling old core when it advances to the package version from the core-2.8.0 release wave (stable 2.8.0 ↔ experimental ~0.214.x). A top-level bump helps only if a reachable patch/minor re-bundles that wave.

Ownership of each pin (traced from origin/mainyarn.lock)

Pinned corePulled in by (exact requester)Top-level owner & rangePatch/minor fixes it?
2.0.1@opentelemetry/sdk-logs@0.203.0, instrumentation@0.203.0, api-logs@0.203.0packages/web direct deps@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0No — provably
2.2.0@opentelemetry/exporter-logs-otlp-http@^0.208.0 + the 0.208.0/2.2.0 waveposthog-js@^1.369.0; also @fastify/otel@0.16.0 (pinned by Sentry)Unverifiable offline
2.5.0@opentelemetry/instrumentation-http@0.211.0 (exact)@sentry/node@^10.40.0 (+ nextjs/profiling-node)Unverifiable offline
2.5.1@opentelemetry/resources@2.5.1; sdk-trace-base@^2.5.1root resolutions override"@opentelemetry/resources": "2.5.1" + Sentry's ^2.5.1 (caret already admits 2.8.0)Self-imposed

Findings

  1. core 2.0.1 cannot be fixed by a patch or minor — confirmed without ambiguity. It's reached through packages/web's own @opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0. For a 0.x dep, caret ^0.203.0 resolves to >=0.203.0 <0.204.0, i.e. patch-only. The core-2.8.0 wave lives at experimental ~0.214.x — roughly eleven minors away and outside the caret. Neither a patch nor a single minor bump within the declared range reaches it; only a deliberate re-pin of those three direct deps to the ~0.214 line would. So a top-level patch/minor genuinely does not solve this chain.

  2. core 2.5.1 is partly self-imposed. The hard 2.5.1 floor is this repo's own pre-existing resolutions entry "@opentelemetry/resources": "2.5.1"; Sentry's ^2.5.1 / ^2.5.1 ranges for core/resources/sdk-trace-base already admit 2.8.0 and refresh on their own.

  3. core 2.2.0 (posthog-js) and core 2.5.0 (@sentry/node) are the only chains where a top-level minor could theoretically help — but only if a later posthog-js@1.x / @sentry/node@10.x re-bundled the 2.8.0 OTel wave (exporter-logs-otlp-http and instrumentation-http are exact-pinned by them). The lockfile resolves both at 1.369.0 and 10.40.0 respectively, still on the old waves. I could not confirm whether a newer in-range release fixes this, because npm/yarn/WebFetch network access is not permitted in this CI run, so I can't read the latest published manifests.

Bottom line

For the largest blocker (core 2.0.1 via web's own ^0.203.0 deps) I can confirm a patch/minor bump does not resolve it — caret math rules it out. For the @sentry/node and posthog-js chains the mechanism (exact internal pins) makes a patch/minor fix unlikely, but I can't prove it offline. To make this airtight, run from the repo root (needs registry access):

# does any in-range release pull the 2.8.0 wave?
yarn info @sentry/node --json | jq '.children.Version'# latest 10.x
yarn info posthog-js --json | jq '.children.Version'# latest 1.x# then, with the resolutions removed, refresh top-levels and inspect:
yarn up '@sentry/node@^10''posthog-js@^1'&& yarn why @opentelemetry/core --recursive

If those still show any @opentelemetry/core < 2.8.0, the qualified resolutions in this PR are the correct fix. The one cleanup worth considering regardless: the packages/web@opentelemetry/{sdk-logs,instrumentation,api-logs}@^0.203.0 deps are direct and quite stale — bumping them to the current ~0.214 line would remove the 2.0.1 chain at the source rather than via an override.

Note: I was unable to run npm/yarn/WebFetch in this run (permissions not granted), so the Sentry/posthog conclusions are structural rather than empirically reproduced. If you re-run me with those tools allowed, I can produce the live yarn why output.
linear/sou-1359-sourcebot-devsourcebot-cve-2026-54285-opentelemetry-7cd4

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@brendan-kellam