{"id":"CVE-2026-76826","kind":"vulnerability","aliases":["CVE-2026-76826"],"related":[],"title":"tsParticles: release workflow lets contributor text run shell commands","description":"tsParticles is a TypeScript library for creating highly customizable particle animations. From 4.0.0 until 4.3.2, the stable publish workflow interpolates steps.release.outputs.body directly into an echo command in Bash source before writing RAW_RELEASE.md. Contributor-controlled shell metacharacters in generated release-note text can therefore execute when a maintainer starts a stable release, allowing modification of generated artifacts or workspace scripts and affecting later release steps that hold GITHUB_TOKEN and write permissions. This issue is fixed in version 4.3.2.","summary":"tsParticles' stable publish workflow pastes generated release-note text directly into a Bash echo command. Shell characters a contributor puts in that text can run commands on the maintainer's release runner, with access to the release token.","severity":"high","cvss":7.5,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["github-actions","npm","package","tsparticles"],"not_affected_if":["consumes-package-only","no-stable-release-workflow"],"how_to_check":"- Look for a `.github/workflows` file that publishes stable releases and contains `echo` with `steps.release.outputs.body`\n- Check the installed `tsparticles` version with `npm ls tsparticles` and compare it to `4.3.2`","fix":"- tsParticles: `4.3.2`","status":"open","published_at":"2026-11-04T23:17:58+00:00","first_seen_at":"2026-11-05T00:31:00+00:00","triaged_at":"2026-11-05T00:31:51+00:00","updated_at":"2026-11-05T00:31:51+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-05T00:31:51Z","model":"claude-haiku-5-5","output":{"fix":"- tsParticles: `4.3.2`","reach":"internet","title":"tsParticles: release workflow lets contributor text run shell commands","impact":"high","summary":"tsParticles' stable publish workflow pastes generated release-note text directly into a Bash echo command. Shell characters a contributor puts in that text can run commands on the maintainer's release runner, with access to the release token.","audience":"developers","category":"package","nicknames":[],"who_cares":["tsparticles","github-actions","npm"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"Code runs on the release runner, exposing the release token and write permissions.","analyst_note":"","how_to_check":"- Look for a `.github/workflows` file that publishes stable releases and contains `echo` with `steps.release.outputs.body`\n- Check the installed `tsparticles` version with `npm ls tsparticles` and compare it to `4.3.2`","plain_action":"","needs_analyst":false,"not_affected_if":["consumes-package-only","no-stable-release-workflow"],"who_is_affected":"The exposure is in the project's own stable publish workflow, which runs when a maintainer starts a stable release from versions 4.0.0 up to 4.3.2. Teams that only consume the tsParticles npm package at runtime are not exposed through this flaw. Teams that copied the same release workflow pattern into their own CI should review it.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000697,"input_tokens":4335,"output_tokens":527,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-76826':12A,15A '4.0.0':73C '4.3.2':75C,140C 'access':56B 'action':18B 'affect':123C 'allow':114C 'anim':71C 'artifact':118C 'bash':35B,88C 'charact':39B 'command':9A,37B,48B,86C 'contributor':5A,41B,94C 'contributor-control':93C 'control':95C 'creat':67C 'customiz':69C 'cve':10A,13A 'direct':32B,82C 'echo':36B,85C 'execut':106C 'fix':137C 'generat':27B,99C,117C 'github':17B,129C 'github-act':16B 'high':68C 'hold':128C 'interpol':80C 'issu':135C 'later':124C 'let':4A 'librari':65C 'maintain':51B,109C 'metacharact':97C 'modif':115C 'note':30B,102C 'npm':19B 'packag':20B 'particl':70C 'past':26B 'permiss':133C 'publish':24B,78C 'put':42B 'raw_release.md':92C 'releas':2A,29B,53B,59B,101C,113C,125C 'release-not':28B,100C 'run':7A,47B 'runner':54B 'script':121C 'shell':8A,38B,96C 'sourc':89C 'stabl':23B,77C,112C 'start':110C 'step':126C 'steps.release.outputs.body':81C 'text':6A,31B,45B,103C 'therefor':105C 'token':60B,130C 'tsparticl':1A,21B,22B,61C 'typescript':64C 'version':139C 'workflow':3A,25B,79C 'workspac':120C 'write':91C,132C","nicknames":[],"mitigations":[],"who_affected":"The exposure is in the project's own stable publish workflow, which runs when a maintainer starts a stable release from versions 4.0.0 up to 4.3.2. Teams that only consume the tsParticles npm package at runtime are not exposed through this flaw. Teams that copied the same release workflow pattern into their own CI should review it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["githubactions","high","npm","package","tsparticles"],"campaign_type":null,"first_public_at":"2026-07-10T09:52:11+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:H/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_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-76826","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-76826","severity":null,"published_at":"2026-11-04T23:17:58+00:00","modified_at":"2026-11-04T23:17:58+00:00","first_seen_at":"2026-11-05T00:31:00+00:00","fetched_at":"2026-11-05T00:31:00+00:00","note":null}],"documents":[{"id":71184,"url":"https://github.com/tsparticles/tsparticles/commit/d3b5672bd61bb847abfa21193c34eabf7aba6896","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":71495,"url":"https://github.com/tsparticles/tsparticles/security/advisories/GHSA-gw8q-3x59-mjjx","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-07-10T09:52:11+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}