lote.guide
esc
  • npm lifecycle scriptsscripts field in package.jsonNode.js
  • setup.py arbitrary code executionsetup.py in source distributions (sdist)Python
  • NODE_OPTIONS preload injectionNODE_OPTIONS environment variable, CLI flags, or .env files loaded via --env-fileNode.js
  • .pth file import execution*.pth files on sys.path (commonly site-packages)Python
  • binding.gyp / node-gyp native compilationbinding.gyp file in the package rootNode.js
  • Corepack (packageManager field)"packageManager" field in package.json, COREPACK_HOME cache directoryNode.js
  • .npmrc registry manipulation.npmrc file (project, user, or global)Node.js
  • overrides / resolutions dependency swapoverrides (npm) or resolutions (Yarn) field in package.jsonNode.js
  • pnpm hooks (pnpmfile.cjs).pnpmfile.cjs in the project rootNode.js
  • .yarnrc.yml plugins and registry.yarnrc.yml in the project rootNode.js
  • pyproject.toml build backendspyproject.toml [build-system] tablePython
  • sitecustomize / usercustomize auto-importsitecustomize.py / usercustomize.py on sys.path (usually site-packages)Python
  • .node native addon loading.node files in node_modules/ (typically under build/Release/ or prebuilds/)Node.js
  • Yarn Plug'n'Play (.pnp.cjs).pnp.cjs in the project rootNode.js
  • __init__.py execution on import__init__.py in any package directory on sys.pathPython
  • .pyc bytecode cache poisoning.pyc files in __pycache__/ directories alongside source modulesPython
  • PYTHONPATH / PYTHONHOME module shadowingPYTHONPATH / PYTHONHOME environment variablesPython
  • npx / npm exec remote executionnpx, npm exec, npm create / npm init (initializer flows)Node.js
  • conftest.py auto-loading (pytest)conftest.py files in any directory pytest traversesPython
  • NODE_PATH environment variableNODE_PATH environment variableNode.js
  • "imports" field (subpath imports)imports field in package.jsonNode.js
  • require.extensions / Module._extensionsrequire.extensions / Module._extensions in any loaded moduleNode.js
  • .egg files and EGG-INFO scripts.egg files in site-packages (registered via easy-install.pth)Python
  • Zip imports (zipimport).zip / .pyz files on sys.path, or passed directly to the interpreterPython
  • PYTHONSTARTUP environment variablePYTHONSTARTUP environment variablePython
  • node_modules/.hooks/ directorynode_modules/.hooks/ directoryNode.js
Node.js
Module resolution/File on disk

"imports" field (subpath imports)

During module resolution for any #-prefixed specifier

Lives in
imports field in package.json
Attacker needs
Supply-chain foothold
Lifecycle
Install
Startup
your code
Module load
Runtime
REPL

Runs on import or require, for every module the app loads.

How it runs

Node 12.19+ supports an imports field in package.json that remaps a package's internal specifiers. Any bare specifier starting with # resolves through this map before normal resolution.

{
  "imports": {
    "#db": "./src/database.js",
    "#auth": "./src/auth.js"
  }
}

Change the map and you change what every #db import loads. The risk is subtle. NODE_PATH needs control of the environment, but subpath imports live in package.json, which is already dense with config and gets less careful review than source. A PR that flips "#auth": "./src/auth.js" to "./src/auth-patched.js" looks like a routine refactor. It still reroutes every #auth import.

Conditional imports make it worse. Conditions like node vs default can make a redirect environment-specific, so it activates only in production or CI and dodges local testing.

Defend

Review package.json diffs as carefully as source; be wary of conditional imports that only activate in prod/CI; lock resolution targets.