Modern software composition works by trust delegation. You trust npm, or PyPI, or Maven, or crates.io, to serve the package you asked for. npm trusts the maintainer account to publish what they intend to publish. The maintainer account trusts its owner (a person with a password, a phone, an email inbox) to be the only one issuing publish commands.
The chain has no compensating controls at the pointy end. An attacker who gets into the maintainer's session, via phishing, credential stuffing, a token leaked in a log, a supply-chain attack on the maintainer's own stack, or social-engineering a reset, gets the publish capability wholesale. npm does not know the attacker is not the maintainer. The maintainer's GitHub does not know. The CI pipeline that installs the package does not know. Every downstream package-lock pins to the version number and the registry-computed integrity hash, both of which the attacker's publish satisfied correctly. The integrity hash is the hash of the attacker's tarball, computed and attested by the registry, delivered to every consumer who installs that version.
The blast radius is the maintainer's download count. Popular libraries multiply that by transitive inclusion. A utility three levels deep in your dependency tree carries its maintainer's publish authority into your build with the same weight as a package you chose directly. You do not see the three-levels-deep maintainer in your dependency audit. Your build sees them every time it installs.