@akasecurity/cli 0.8.1 → 0.9.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/cli.js +2353 -1293
- package/package.json +12 -6
- package/web-ui/packages/dashboard-ui/package.json +1 -1
- package/web-ui/packages/detections/package.json +2 -2
- package/web-ui/packages/local-ops/package.json +3 -2
- package/web-ui/packages/persistence/package.json +2 -2
- package/web-ui/packages/plugin-sdk/package.json +29 -0
- package/web-ui/packages/schema/package.json +2 -2
- package/web-ui/rules/code-flaws/auth-jwt-no-verify.json +20 -0
- package/web-ui/rules/code-flaws/auth-ssl-verify-false.json +19 -0
- package/web-ui/rules/code-flaws/cmd-inject-exec.json +20 -0
- package/web-ui/rules/code-flaws/cmd-inject-node-exec.json +20 -0
- package/web-ui/rules/code-flaws/cmd-inject-shell.json +20 -0
- package/web-ui/rules/code-flaws/crypto-insecure-random.json +20 -0
- package/web-ui/rules/code-flaws/crypto-weak-hash-md5.json +16 -0
- package/web-ui/rules/code-flaws/crypto-weak-hash-sha1.json +23 -0
- package/web-ui/rules/code-flaws/deser-java-ois.json +22 -0
- package/web-ui/rules/code-flaws/deser-pickle.json +16 -0
- package/web-ui/rules/code-flaws/deser-yaml-unsafe.json +16 -0
- package/web-ui/rules/code-flaws/dev-debug-enabled.json +13 -0
- package/web-ui/rules/code-flaws/dev-placeholder-secret.json +24 -0
- package/web-ui/rules/code-flaws/dev-wildcard-cors.json +17 -0
- package/web-ui/rules/code-flaws/eval-dynamic-exec.json +17 -0
- package/web-ui/rules/code-flaws/hardcoded-password.json +23 -0
- package/web-ui/rules/code-flaws/hardcoded-secret-key.json +17 -0
- package/web-ui/rules/code-flaws/path-traversal-join.json +19 -0
- package/web-ui/rules/code-flaws/path-traversal-open.json +20 -0
- package/web-ui/rules/code-flaws/prototype-pollution-merge.json +16 -0
- package/web-ui/rules/code-flaws/regex-redos-backtrack.json +13 -0
- package/web-ui/rules/code-flaws/sql-inject-concat-dot.json +16 -0
- package/web-ui/rules/code-flaws/sql-inject-concat.json +13 -0
- package/web-ui/rules/code-flaws/sql-inject-format.json +16 -0
- package/web-ui/rules/code-flaws/sql-inject-interp.json +19 -0
- package/web-ui/rules/code-flaws/ssrf-user-url.json +16 -0
- package/web-ui/rules/code-flaws/xss-dangerously-set.json +16 -0
- package/web-ui/rules/code-flaws/xss-inner-html.json +16 -0
- package/web-ui/rules/code-flaws/xss-unescaped-render.json +16 -0
- package/web-ui/rules/core-code-context/db-table-name.json +29 -0
- package/web-ui/rules/core-code-context/feature-flag.json +24 -0
- package/web-ui/rules/core-code-context/file-path.json +17 -0
- package/web-ui/rules/core-code-context/internal-domain.json +13 -0
- package/web-ui/rules/core-code-context/internal-ip.json +13 -0
- package/web-ui/rules/core-code-context/internal-url.json +27 -0
- package/web-ui/rules/core-code-context/localhost-ref.json +13 -0
- package/web-ui/rules/core-code-context/stack-trace.json +13 -0
- package/web-ui/rules/core-financial/credit-card.json +14 -0
- package/web-ui/rules/core-financial/cusip.json +14 -0
- package/web-ui/rules/core-financial/cvv.json +13 -0
- package/web-ui/rules/core-financial/iban.json +17 -0
- package/web-ui/rules/core-financial/paypal.json +14 -0
- package/web-ui/rules/core-financial/routing-number.json +14 -0
- package/web-ui/rules/core-financial/salary.json +23 -0
- package/web-ui/rules/core-financial/swift.json +14 -0
- package/web-ui/rules/core-phi/biometric-ref.json +23 -0
- package/web-ui/rules/core-phi/genetic-data.json +24 -0
- package/web-ui/rules/core-phi/group-id.json +19 -0
- package/web-ui/rules/core-phi/hipaa-identifier.json +13 -0
- package/web-ui/rules/core-phi/icd10-code.json +14 -0
- package/web-ui/rules/core-phi/member-id.json +13 -0
- package/web-ui/rules/core-phi/mrn.json +13 -0
- package/web-ui/rules/core-phi/ndc-code.json +13 -0
- package/web-ui/rules/core-pii/dob.json +18 -0
- package/web-ui/rules/core-pii/drivers-license-us.json +14 -0
- package/web-ui/rules/core-pii/email.json +13 -0
- package/web-ui/rules/core-pii/home-address.json +21 -0
- package/web-ui/rules/core-pii/ip-address.json +13 -0
- package/web-ui/rules/core-pii/mac-address.json +13 -0
- package/web-ui/rules/core-pii/name.json +21 -0
- package/web-ui/rules/core-pii/national-id.json +27 -0
- package/web-ui/rules/core-pii/passport-us.json +17 -0
- package/web-ui/rules/core-pii/phone-intl.json +13 -0
- package/web-ui/rules/core-pii/phone-us.json +17 -0
- package/web-ui/rules/core-pii/ssn.json +13 -0
- package/web-ui/rules/core-pii/vin.json +13 -0
- package/web-ui/rules/core-pii/zip.json +30 -0
- package/web-ui/rules/secrets/anthropic-api-key.json +14 -0
- package/web-ui/rules/secrets/aws-access-key.json +14 -0
- package/web-ui/rules/secrets/aws-secret-key.json +15 -0
- package/web-ui/rules/secrets/azure-connection-string.json +13 -0
- package/web-ui/rules/secrets/cloudflare-api-key.json +15 -0
- package/web-ui/rules/secrets/datadog-key.json +15 -0
- package/web-ui/rules/secrets/digitalocean-token.json +13 -0
- package/web-ui/rules/secrets/discord-token.json +14 -0
- package/web-ui/rules/secrets/gcp-service-account.json +16 -0
- package/web-ui/rules/secrets/github-pat.json +16 -0
- package/web-ui/rules/secrets/gitlab-token.json +14 -0
- package/web-ui/rules/secrets/heroku-api-key.json +14 -0
- package/web-ui/rules/secrets/npm-token.json +14 -0
- package/web-ui/rules/secrets/openai-api-key.json +14 -0
- package/web-ui/rules/secrets/pulumi-access-token.json +14 -0
- package/web-ui/rules/secrets/sendgrid-key.json +14 -0
- package/web-ui/rules/secrets/slack-token.json +13 -0
- package/web-ui/rules/secrets/stripe-live-key.json +14 -0
- package/web-ui/rules/secrets/terraform-cloud-token.json +16 -0
- package/web-ui/rules/secrets/twilio-key.json +13 -0
- package/web-ui/rules/secrets/vault-token.json +14 -0
- package/web-ui/rules/secrets-infra/api-key-header.json +15 -0
- package/web-ui/rules/secrets-infra/basic-auth-header.json +13 -0
- package/web-ui/rules/secrets-infra/basic-auth-url.json +13 -0
- package/web-ui/rules/secrets-infra/bearer-token.json +17 -0
- package/web-ui/rules/secrets-infra/db-connection-string.json +13 -0
- package/web-ui/rules/secrets-infra/docker-config-auth.json +13 -0
- package/web-ui/rules/secrets-infra/env-key-value.json +14 -0
- package/web-ui/rules/secrets-infra/generic-high-entropy-secret.json +18 -0
- package/web-ui/rules/secrets-infra/jwt-token.json +16 -0
- package/web-ui/rules/secrets-infra/kubeconfig-token.json +14 -0
- package/web-ui/rules/secrets-infra/password-field.json +14 -0
- package/web-ui/rules/secrets-infra/pgp-private-key.json +15 -0
- package/web-ui/rules/secrets-infra/ssh-private-key.json +15 -0
- package/web-ui/web-ui/.next/BUILD_ID +1 -1
- package/web-ui/web-ui/.next/app-build-manifest.json +56 -55
- package/web-ui/web-ui/.next/app-path-routes-manifest.json +6 -6
- package/web-ui/web-ui/.next/build-manifest.json +2 -2
- package/web-ui/web-ui/.next/prerender-manifest.json +15 -15
- package/web-ui/web-ui/.next/required-server-files.json +4 -3
- package/web-ui/web-ui/.next/server/app/(app)/activity/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/activity/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/data-shares/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/detections/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/detections/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/detections/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/[id]/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/new/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/exceptions/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/findings/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/findings/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/findings/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/inventory/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/policies/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/policies/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/policies/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/scan/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/settings/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/settings/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/updates/page.js +2 -2
- package/web-ui/web-ui/.next/server/app/(app)/updates/page.js.nft.json +1 -1
- package/web-ui/web-ui/.next/server/app/(app)/updates/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found.html +1 -1
- package/web-ui/web-ui/.next/server/app/_not-found.rsc +2 -2
- package/web-ui/web-ui/.next/server/app/index.html +1 -1
- package/web-ui/web-ui/.next/server/app/index.rsc +2 -2
- package/web-ui/web-ui/.next/server/app/page.js +1 -1
- package/web-ui/web-ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/app-paths-manifest.json +6 -6
- package/web-ui/web-ui/.next/server/chunks/366.js +582 -0
- package/web-ui/web-ui/.next/server/chunks/45.js +1 -1
- package/web-ui/web-ui/.next/server/chunks/461.js +5 -5
- package/web-ui/web-ui/.next/server/chunks/484.js +580 -0
- package/web-ui/web-ui/.next/server/chunks/773.js +4 -4
- package/web-ui/web-ui/.next/server/chunks/900.js +1 -0
- package/web-ui/web-ui/.next/server/chunks/918.js +2 -0
- package/web-ui/web-ui/.next/server/functions-config-manifest.json +5 -5
- package/web-ui/web-ui/.next/server/middleware-manifest.json +5 -5
- package/web-ui/web-ui/.next/server/pages/404.html +1 -1
- package/web-ui/web-ui/.next/server/pages/500.html +1 -1
- package/web-ui/web-ui/.next/server/server-reference-manifest.js +1 -1
- package/web-ui/web-ui/.next/server/server-reference-manifest.json +1 -1
- package/web-ui/web-ui/.next/static/chunks/{24-b20c857178647805.js → 24-55b96836aea5ce23.js} +3 -3
- package/web-ui/web-ui/.next/static/chunks/561-c3388f066f813e17.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-0c208c8b275a69ac.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-041187c76bd42461.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-481fedcbfb474cef.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-a20e7d7a2f0ad507.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-2cfe42c3dd4833c3.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-849d66cc2cd77cb6.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-d33f3999e89c7e77.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-76edd10592ba3cb1.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-d15081016f40ac92.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-50b604f229747240.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-92d1086c8e8ed3bf.js +1 -0
- package/web-ui/web-ui/.next/static/chunks/app/(app)/updates/{page-b9607b5e2e8700d6.js → page-c3c1671d32547619.js} +1 -1
- package/web-ui/web-ui/.next/static/chunks/app/{layout-8b19b03146218dc7.js → layout-40fea3e270a8e120.js} +1 -1
- package/web-ui/web-ui/.next/static/css/43f95c94ecc1bd17.css +2 -0
- package/web-ui/web-ui/package.json +1 -1
- package/web-ui/web-ui/server.js +1 -1
- package/LICENSE +0 -201
- package/web-ui/web-ui/.next/server/chunks/116.js +0 -536
- package/web-ui/web-ui/.next/server/chunks/223.js +0 -534
- package/web-ui/web-ui/.next/server/chunks/226.js +0 -2
- package/web-ui/web-ui/.next/server/chunks/640.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/561-3a19cd28d2b941fa.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/activity/page-f6b1b344709ee48e.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/data-shares/page-548fa0d3dee6e829.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/detections/page-0bfa1f371b65b5ad.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/[id]/page-56ec5c05f347108a.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/new/page-cb33dc32fd3648bf.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/exceptions/page-b6fbc540ef0a50f8.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/findings/page-94eb9d838ae00222.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/inventory/page-89cf3ac5a30e76a0.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/layout-a86819fe3aeb2491.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/scan/page-0d43a6b2acafe349.js +0 -1
- package/web-ui/web-ui/.next/static/chunks/app/(app)/settings/page-2cf02a09402cfb4d.js +0 -1
- package/web-ui/web-ui/.next/static/css/69dfaec5234c6b99.css +0 -2
- /package/web-ui/web-ui/.next/static/{X9C7-HlMI5zAQEKfIW_6e → unUYwnPVSRwxtrUFgSAxr}/_buildManifest.js +0 -0
- /package/web-ui/web-ui/.next/static/{X9C7-HlMI5zAQEKfIW_6e → unUYwnPVSRwxtrUFgSAxr}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akasecurity/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-rc1",
|
|
4
4
|
"description": "AI Traffic Control — local-first CLI to inspect and govern AI agent traffic on your machine",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -32,9 +32,10 @@
|
|
|
32
32
|
"react-dom": "^19.2.7"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@types/node": "^
|
|
35
|
+
"@types/node": "^24.13.3",
|
|
36
36
|
"@types/react": "^19.2.17",
|
|
37
37
|
"eslint": "^9.0.0",
|
|
38
|
+
"postject": "^1.0.0-alpha.6",
|
|
38
39
|
"tsup": "^8.0.0",
|
|
39
40
|
"tsx": "^4.23.1",
|
|
40
41
|
"typescript": "^5.8.0",
|
|
@@ -43,16 +44,21 @@
|
|
|
43
44
|
"@akasecurity/detections": "0.8.0",
|
|
44
45
|
"@akasecurity/eslint-config": "0.8.0",
|
|
45
46
|
"@akasecurity/local-ops": "0.8.0",
|
|
46
|
-
"@akasecurity/plugin-sdk": "0.8.0",
|
|
47
|
-
"@akasecurity/schema": "0.8.0",
|
|
48
47
|
"@akasecurity/persistence": "0.8.0",
|
|
49
|
-
"@akasecurity/web-ui": "0.8.0"
|
|
48
|
+
"@akasecurity/web-ui": "0.8.0",
|
|
49
|
+
"@akasecurity/plugin-sdk": "0.8.0",
|
|
50
|
+
"@akasecurity/schema": "0.8.0"
|
|
50
51
|
},
|
|
51
52
|
"scripts": {
|
|
52
53
|
"dev": "tsx src/cli.ts",
|
|
53
54
|
"build": "tsup",
|
|
55
|
+
"build:sea": "tsup --config tsup.sea.config.ts",
|
|
56
|
+
"smoke:sea": "node scripts/smoke-sea.mjs",
|
|
57
|
+
"smoke:dashboard": "node scripts/smoke-dashboard.mjs",
|
|
58
|
+
"package:sea": "node scripts/package-sea.mjs",
|
|
59
|
+
"archive:sea": "node scripts/archive-sea.mjs",
|
|
54
60
|
"bundle:web-ui": "node scripts/bundle-web-ui.mjs",
|
|
55
|
-
"lint": "eslint src",
|
|
61
|
+
"lint": "eslint src test",
|
|
56
62
|
"test": "vitest run",
|
|
57
63
|
"typecheck": "tsc --noEmit"
|
|
58
64
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
".": "./src/index.ts"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"lint": "eslint src",
|
|
10
|
+
"lint": "eslint src test",
|
|
11
11
|
"typecheck": "tsc --noEmit",
|
|
12
12
|
"test": "vitest run"
|
|
13
13
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@akasecurity/eslint-config": "workspace:*",
|
|
19
19
|
"@akasecurity/extract": "workspace:*",
|
|
20
|
-
"@types/node": "^
|
|
20
|
+
"@types/node": "^24.13.3",
|
|
21
21
|
"eslint": "^9.0.0",
|
|
22
22
|
"typescript": "^5.8.0",
|
|
23
23
|
"vitest": "^4.1.10"
|
|
@@ -7,19 +7,20 @@
|
|
|
7
7
|
".": "./src/index.ts"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"lint": "eslint src",
|
|
10
|
+
"lint": "eslint src test",
|
|
11
11
|
"typecheck": "tsc --noEmit",
|
|
12
12
|
"test": "vitest run"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@akasecurity/detections": "workspace:*",
|
|
16
16
|
"@akasecurity/persistence": "workspace:*",
|
|
17
|
+
"@akasecurity/plugin-sdk": "workspace:*",
|
|
17
18
|
"@akasecurity/schema": "workspace:*",
|
|
18
19
|
"ignore": "^7.0.6"
|
|
19
20
|
},
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@akasecurity/eslint-config": "workspace:*",
|
|
22
|
-
"@types/node": "^
|
|
23
|
+
"@types/node": "^24.13.3",
|
|
23
24
|
"eslint": "^9.0.0",
|
|
24
25
|
"typescript": "^5.8.0",
|
|
25
26
|
"vitest": "^4.1.10"
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
".": "./src/index.ts"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"lint": "eslint src",
|
|
10
|
+
"lint": "eslint src test",
|
|
11
11
|
"typecheck": "tsc --noEmit",
|
|
12
12
|
"test": "vitest run"
|
|
13
13
|
},
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@akasecurity/eslint-config": "workspace:*",
|
|
19
|
-
"@types/node": "^
|
|
19
|
+
"@types/node": "^24.13.3",
|
|
20
20
|
"eslint": "^9.0.0",
|
|
21
21
|
"typescript": "^5.8.0",
|
|
22
22
|
"vitest": "^4.1.10"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@akasecurity/plugin-sdk",
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./src/index.ts"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"gen:bundled-packs": "node scripts/gen-bundled-packs.mjs",
|
|
11
|
+
"lint": "eslint src test",
|
|
12
|
+
"test": "vitest run",
|
|
13
|
+
"typecheck": "tsc --noEmit"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@akasecurity/detections": "workspace:*",
|
|
17
|
+
"@akasecurity/persistence": "workspace:*",
|
|
18
|
+
"@akasecurity/schema": "workspace:*",
|
|
19
|
+
"ignore": "^7.0.6",
|
|
20
|
+
"zod": "^4.0.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@akasecurity/eslint-config": "workspace:*",
|
|
24
|
+
"@types/node": "^24.13.3",
|
|
25
|
+
"eslint": "^9.0.0",
|
|
26
|
+
"typescript": "^5.8.0",
|
|
27
|
+
"vitest": "^4.1.10"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"./drizzle": "./src/drizzle/index.ts"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"lint": "eslint src",
|
|
12
|
+
"lint": "eslint src test",
|
|
13
13
|
"typecheck": "tsc --noEmit",
|
|
14
14
|
"test": "vitest run",
|
|
15
15
|
"gen:sqlite-ddl": "drizzle-kit generate --config drizzle.config.local.ts && node scripts/gen-sqlite-ddl.mjs"
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@akasecurity/eslint-config": "workspace:*",
|
|
23
|
-
"@types/node": "^
|
|
23
|
+
"@types/node": "^24.13.3",
|
|
24
24
|
"drizzle-kit": "^0.31.0",
|
|
25
25
|
"eslint": "^9.0.0",
|
|
26
26
|
"typescript": "^5.8.0",
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/auth-jwt-no-verify",
|
|
4
|
+
"name": "JWT decoded without signature verification",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "(verify\\s*=\\s*false|verify_signature.*false|algorithms\\s*=\\s*\\[\\])",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["jwt", "decode", "token"],
|
|
14
|
+
"windowChars": 160
|
|
15
|
+
},
|
|
16
|
+
"examples": [
|
|
17
|
+
"jwt.decode(token, options={\"verify_signature\": False})",
|
|
18
|
+
"jwt.decode(token, algorithms=[])"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/auth-ssl-verify-false",
|
|
4
|
+
"name": "SSL certificate verification disabled",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\brequests\\.(get|post|put|delete|patch|request)\\s*\\([^)]*verify\\s*=\\s*False",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": [
|
|
13
|
+
"requests.get(url, verify=False)",
|
|
14
|
+
"requests.post(endpoint, data=payload, verify=False)"
|
|
15
|
+
],
|
|
16
|
+
"appliesTo": {
|
|
17
|
+
"extensions": [".py"]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/cmd-inject-exec",
|
|
4
|
+
"name": "Command injection via Java Runtime.exec",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "Runtime\\.getRuntime\\(\\)\\.exec\\(",
|
|
10
|
+
"flags": "g"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["input", "request", "param", "user"],
|
|
14
|
+
"windowChars": 200
|
|
15
|
+
},
|
|
16
|
+
"examples": ["Runtime.getRuntime().exec(userInput)"],
|
|
17
|
+
"appliesTo": {
|
|
18
|
+
"extensions": [".java"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/cmd-inject-node-exec",
|
|
4
|
+
"name": "Command injection via Node.js exec with variable argument",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\bexec(?:Sync)?\\s*\\(\\s*(?!['\"`])",
|
|
10
|
+
"flags": "g"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["input", "request", "param", "argv", "user", "query", "body"],
|
|
14
|
+
"windowChars": 200
|
|
15
|
+
},
|
|
16
|
+
"examples": ["exec(req.query.cmd)", "execSync(userInput)"],
|
|
17
|
+
"appliesTo": {
|
|
18
|
+
"extensions": [".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/cmd-inject-shell",
|
|
4
|
+
"name": "Command injection via subprocess shell=True",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "subprocess\\.(run|Popen|call|check_output)\\s*\\([^)]*shell\\s*=\\s*True",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["input", "request", "param", "argv", "user"],
|
|
14
|
+
"windowChars": 300
|
|
15
|
+
},
|
|
16
|
+
"examples": ["subprocess.run(user_input, shell=True)"],
|
|
17
|
+
"appliesTo": {
|
|
18
|
+
"extensions": [".py"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/crypto-insecure-random",
|
|
4
|
+
"name": "Insecure random number generator used for security-sensitive value",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "medium",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\b(Math\\.random\\(\\)|random\\.random\\(\\)|random\\.randint\\()",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["token", "session", "key", "password", "secret", "nonce", "salt"],
|
|
14
|
+
"windowChars": 160
|
|
15
|
+
},
|
|
16
|
+
"examples": ["const token = Math.random().toString(36)", "session_key = str(random.random())"],
|
|
17
|
+
"appliesTo": {
|
|
18
|
+
"extensions": [".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs", ".py"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/crypto-weak-hash-md5",
|
|
4
|
+
"name": "Weak cryptographic hash: MD5",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "medium",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "(hashlib\\.md5\\s*\\(|MD5\\.(?:digest|hash)\\b|Digest::MD5|MessageDigest\\.getInstance\\s*\\(\\s*[\"']MD5[\"'])",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["hashlib.md5(password.encode())", "MessageDigest.getInstance(\"MD5\")"],
|
|
13
|
+
"appliesTo": {
|
|
14
|
+
"extensions": [".py", ".rb", ".java"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/crypto-weak-hash-sha1",
|
|
4
|
+
"name": "Weak cryptographic hash: SHA-1 in security context",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "medium",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "(hashlib\\.sha1\\s*\\(|SHA1\\.(?:digest|hash)\\b|Digest::SHA1|MessageDigest\\.getInstance\\s*\\(\\s*[\"']SHA-?1[\"'])",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["password", "credential", "hash", "token", "secret"],
|
|
14
|
+
"windowChars": 160
|
|
15
|
+
},
|
|
16
|
+
"examples": [
|
|
17
|
+
"password_hash = hashlib.sha1(password.encode()).hexdigest()",
|
|
18
|
+
"MessageDigest.getInstance(\"SHA1\")"
|
|
19
|
+
],
|
|
20
|
+
"appliesTo": {
|
|
21
|
+
"extensions": [".py", ".rb", ".java"]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/deser-java-ois",
|
|
4
|
+
"name": "Insecure deserialization via Java ObjectInputStream",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\bObjectInputStream\\b",
|
|
10
|
+
"flags": "g"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["readObject"],
|
|
14
|
+
"windowChars": 200
|
|
15
|
+
},
|
|
16
|
+
"examples": [
|
|
17
|
+
"ObjectInputStream ois = new ObjectInputStream(inputStream); Object obj = ois.readObject();"
|
|
18
|
+
],
|
|
19
|
+
"appliesTo": {
|
|
20
|
+
"extensions": [".java"]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/deser-pickle",
|
|
4
|
+
"name": "Insecure deserialization via Python pickle",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\bpickle\\.loads?\\s*\\(",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["data = pickle.loads(user_data)", "obj = pickle.load(request.stream)"],
|
|
13
|
+
"appliesTo": {
|
|
14
|
+
"extensions": [".py"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/deser-yaml-unsafe",
|
|
4
|
+
"name": "Insecure deserialization via yaml.load without SafeLoader",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\byaml\\.load\\s*\\((?![^)]*SafeLoader|[^)]*safe_load)",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["data = yaml.load(user_input)", "config = yaml.load(f)"],
|
|
13
|
+
"appliesTo": {
|
|
14
|
+
"extensions": [".py"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/dev-debug-enabled",
|
|
4
|
+
"name": "Debug mode enabled in configuration",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "medium",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\bdebug\\s*[=:]\\s*(true|1|yes)",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["DEBUG = True", "debug: true", "app.debug = True"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/dev-placeholder-secret",
|
|
4
|
+
"name": "Placeholder or default secret left in code",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "keyword",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"changeme",
|
|
11
|
+
"placeholder",
|
|
12
|
+
"your-secret",
|
|
13
|
+
"dev-secret",
|
|
14
|
+
"replace-me",
|
|
15
|
+
"todo-secret"
|
|
16
|
+
],
|
|
17
|
+
"caseSensitive": false
|
|
18
|
+
},
|
|
19
|
+
"requiresNearby": {
|
|
20
|
+
"labels": ["key", "secret", "password", "token"],
|
|
21
|
+
"windowChars": 80
|
|
22
|
+
},
|
|
23
|
+
"examples": ["SECRET_KEY = 'changeme'", "api_token = 'your-secret'"]
|
|
24
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/dev-wildcard-cors",
|
|
4
|
+
"name": "CORS wildcard allowing all origins",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "medium",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "(Access-Control-Allow-Origin:\\s*\\*|origin:\\s*[\"']\\*[\"']|allow_all_origins\\s*=\\s*True|CORS_ALLOW_ALL_ORIGINS\\s*=\\s*True)",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": [
|
|
13
|
+
"Access-Control-Allow-Origin: *",
|
|
14
|
+
"cors({ origin: '*' })",
|
|
15
|
+
"CORS_ALLOW_ALL_ORIGINS = True"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/eval-dynamic-exec",
|
|
4
|
+
"name": "Dynamic code execution with user-controlled input",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "critical",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\b(eval|exec)\\s*\\(\\s*(?!['\"`])",
|
|
10
|
+
"flags": "g"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["input", "request", "param", "user", "query", "body"],
|
|
14
|
+
"windowChars": 200
|
|
15
|
+
},
|
|
16
|
+
"examples": ["eval(request.body.code)", "exec(user_input)"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/hardcoded-password",
|
|
4
|
+
"name": "Hardcoded password in source code",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "(?:password|passwd|pwd)\\s*=\\s*[\"']([^\"']{3,})[\"']",
|
|
10
|
+
"flags": "gi",
|
|
11
|
+
"captureGroup": 1
|
|
12
|
+
},
|
|
13
|
+
"postValidators": [
|
|
14
|
+
{
|
|
15
|
+
"name": "entropy",
|
|
16
|
+
"config": {
|
|
17
|
+
"minLength": 8,
|
|
18
|
+
"threshold": 3.0
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"examples": ["password = \"Tr0ub4dor&3\"", "DB_PASSWORD = 'c0rr3ctH0rseBatt3ry'"]
|
|
23
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/hardcoded-secret-key",
|
|
4
|
+
"name": "Hardcoded API key or secret key in source code",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\b(secret[_-]?key|api[_-]?key|auth[_-]?token)\\s*=\\s*[\"'][^\"']{8,}[\"']",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"postValidators": ["entropy"],
|
|
13
|
+
"examples": [
|
|
14
|
+
"SECRET_KEY = \"a9f2c8e1b4d7f3a6c9e2b5d8f1a4c7e0\"",
|
|
15
|
+
"api_key = 'sk-proj-abc123XYZ789def456'"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/path-traversal-join",
|
|
4
|
+
"name": "Path traversal via os.path.join with user-controlled component",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "os\\.path\\.join\\s*\\([^,)]+,\\s*(request|req|params|user)",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": [
|
|
13
|
+
"os.path.join(base_dir, request.args['file'])",
|
|
14
|
+
"os.path.join(upload_dir, user_filename)"
|
|
15
|
+
],
|
|
16
|
+
"appliesTo": {
|
|
17
|
+
"extensions": [".py"]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/path-traversal-open",
|
|
4
|
+
"name": "Path traversal via open() with user-controlled path",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\bopen\\s*\\(\\s*(request|req|params|argv|input)",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"requiresNearby": {
|
|
13
|
+
"labels": ["request", "param", "input", "argv", "user"],
|
|
14
|
+
"windowChars": 200
|
|
15
|
+
},
|
|
16
|
+
"examples": ["open(request.args['filename'])", "open(params['path'])"],
|
|
17
|
+
"appliesTo": {
|
|
18
|
+
"extensions": [".py", ".rb"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/prototype-pollution-merge",
|
|
4
|
+
"name": "Prototype pollution via merge with user-controlled input",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "(Object\\.assign\\s*\\(\\s*\\w+\\s*,\\s*(req|request|body|params|query)|_\\.merge\\s*\\(\\s*\\w+\\s*,\\s*(req|request))",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["Object.assign(config, req.body)", "_.merge(target, request.body)"],
|
|
13
|
+
"appliesTo": {
|
|
14
|
+
"extensions": [".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/regex-redos-backtrack",
|
|
4
|
+
"name": "ReDoS via catastrophic backtracking pattern",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "medium",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\((?:\\?:)?(?:\\\\.|\\[[^\\]]*\\]|[^\\\\()\\[\\]+*?|])[+*](?:(?:\\\\.|\\[[^\\]]*\\]|[^\\\\()\\[\\]+*?|])\\*)?\\)[+*]|\\((?:\\?:)?([^()|]+)\\|\\1\\)[+*]",
|
|
10
|
+
"flags": "g"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["/(a+)+/", "/(\\w+\\s*)+/"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/sql-inject-concat-dot",
|
|
4
|
+
"name": "SQL injection via string concatenation (PHP dot operator)",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "[\"'][^\\n]*?(select|insert|update|delete|drop|where)[^\\n]*?[\"']\\s*\\.",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"appliesTo": {
|
|
13
|
+
"extensions": [".php"]
|
|
14
|
+
},
|
|
15
|
+
"examples": ["$query = \"SELECT * FROM orders WHERE user = \" . $username;"]
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/sql-inject-concat",
|
|
4
|
+
"name": "SQL injection via string concatenation",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "[\"']\\s*(?:select\\b[^\\n]*?\\bfrom\\b|insert\\s+into\\b|update\\s+\\S+\\s+set\\b|delete\\s+from\\b|drop\\s+(?:table|database)\\b|where\\b[^\\n]*?=)[^\\n]*?[\"']\\s*\\+",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": ["\"SELECT * FROM users WHERE id = \" + userId"]
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"specVersion": 1,
|
|
3
|
+
"id": "code-flaws/sql-inject-format",
|
|
4
|
+
"name": "SQL injection via format string or f-string",
|
|
5
|
+
"category": "code_flaw",
|
|
6
|
+
"severity": "high",
|
|
7
|
+
"matcher": {
|
|
8
|
+
"type": "regex",
|
|
9
|
+
"pattern": "\\b(?:select\\b[^\\n]*?\\bfrom\\b|insert\\s+into\\b|update\\s+\\S+\\s+set\\b|delete\\s+from\\b|drop\\s+(?:table|database)\\b|where\\b[^\\n]*?=)[^\\n]*?(?:[%][sd]|\\{[^}]+\\})",
|
|
10
|
+
"flags": "gi"
|
|
11
|
+
},
|
|
12
|
+
"examples": [
|
|
13
|
+
"f\"SELECT * FROM users WHERE id = {user_id}\"",
|
|
14
|
+
"\"SELECT * FROM users WHERE name = '%s'\" % name"
|
|
15
|
+
]
|
|
16
|
+
}
|