Please report security issues privately through GitHub Security Advisories rather than as a public issue.
Expect an acknowledgement within 72 hours and an assessment within seven days. If a fix is warranted, you will be credited in the advisory unless you ask not to be.
The latest minor release receives security fixes. This project is pre-1.0; when it reaches 1.0 this section will name a support window.
scriptgate reads hostile input by design — the whole point is pointing it at dependency code nobody has vetted. The following are in scope:
- Code execution while scanning. Nothing from
node_modulesshould ever be executed. If a crafted package can get code to run during a scan, that is a critical bug. - Path traversal. A crafted package that gets the analyser to read a file outside its own directory. Script resolution rejects paths that escape the package; a bypass is in scope.
- Denial of service. A crafted package or tree that makes a scan hang or exhaust memory — a symlink cycle that defeats the visited-set, a script that makes a detector backtrack catastrophically.
- Report injection. Output that lets a package's own content forge findings — terminal escape sequences that rewrite the screen, markdown that breaks out of a table cell, SARIF that misattributes a result.
- Silent under-reporting. A construction that reliably hides an install script from discovery. A missed detection is a false negative, which is usually a bug rather than a vulnerability; a general technique for making install-time execution invisible to the scan is a vulnerability.
- A missed signal in one package. Lexical analysis has limits, and the README states them. Please open a normal issue — those reports are welcome and useful, they are just not security reports.
- A false positive. Same: open a false finding issue.
- Vulnerabilities in packages scriptgate reports on. Report those to the package's maintainers. scriptgate is the messenger.
- No network access. There is none anywhere in the tool. It cannot exfiltrate what it reads, and it works in an air-gapped build.
- Nothing is executed. Scripts from
node_modulesare read as text. Hook commands are parsed as strings, never passed to a shell. - Zero runtime dependencies. The published package has no
dependencies, so installing it does not widen your supply chain. - No install script of its own. scriptgate does not need one, and shipping one would be a poor joke.
- Reads are bounded. Referenced scripts are read up to 256 KiB and directory descent is depth-limited, so a hostile tree cannot turn a scan into an unbounded read.
- Writes are confined. The only file scriptgate ever writes is the project's
own
package.json, and only whenallowlist --writeis passed explicitly.