shieldcortex 2.8.4 → 2.9.0
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/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dist/audit/env-scanner.d.ts +15 -0
- package/dist/audit/env-scanner.d.ts.map +1 -0
- package/dist/audit/env-scanner.js +206 -0
- package/dist/audit/env-scanner.js.map +1 -0
- package/dist/audit/index.d.ts +14 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +13 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/mcp-config-scanner.d.ts +14 -0
- package/dist/audit/mcp-config-scanner.d.ts.map +1 -0
- package/dist/audit/mcp-config-scanner.js +177 -0
- package/dist/audit/mcp-config-scanner.js.map +1 -0
- package/dist/audit/memory-scanner.d.ts +15 -0
- package/dist/audit/memory-scanner.d.ts.map +1 -0
- package/dist/audit/memory-scanner.js +205 -0
- package/dist/audit/memory-scanner.js.map +1 -0
- package/dist/audit/report-formatter.d.ts +24 -0
- package/dist/audit/report-formatter.d.ts.map +1 -0
- package/dist/audit/report-formatter.js +237 -0
- package/dist/audit/report-formatter.js.map +1 -0
- package/dist/audit/rules-file-scanner.d.ts +17 -0
- package/dist/audit/rules-file-scanner.d.ts.map +1 -0
- package/dist/audit/rules-file-scanner.js +176 -0
- package/dist/audit/rules-file-scanner.js.map +1 -0
- package/dist/audit/types.d.ts +67 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +27 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/cli/audit.d.ts +17 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +131 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{Sh1pTRq-2YtlSVsTji7Mb → VvHJmUpDhBZ-8LaJ5n-QH}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{Sh1pTRq-2YtlSVsTji7Mb → VvHJmUpDhBZ-8LaJ5n-QH}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{Sh1pTRq-2YtlSVsTji7Mb → VvHJmUpDhBZ-8LaJ5n-QH}/_ssgManifest.js +0 -0
|
@@ -13,7 +13,7 @@ f:I[56978,["/_next/static/chunks/64ee9622541d967c.js"],"MetadataBoundary"]
|
|
|
13
13
|
:HL["/_next/static/chunks/00fd16d311d2adfc.css","style"]
|
|
14
14
|
:HL["/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
15
|
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
16
|
-
0:{"P":null,"b":"
|
|
16
|
+
0:{"P":null,"b":"VvHJmUpDhBZ-8LaJ5n-QH","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/00fd16d311d2adfc.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/e007ff86847a4042.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/d334b69bff7779be.js","async":true}]],"template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/fc2dbf641aad1448.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1fd7f60bc5840039.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/c1354725e21132d5.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$11",[]],"S":true}
|
|
17
17
|
8:{}
|
|
18
18
|
9:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
19
19
|
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
3:I[23733,["/_next/static/chunks/e007ff86847a4042.js","/_next/static/chunks/fc2dbf641aad1448.js","/_next/static/chunks/1fd7f60bc5840039.js","/_next/static/chunks/c1354725e21132d5.js"],"default"]
|
|
4
4
|
6:I[56978,["/_next/static/chunks/64ee9622541d967c.js"],"OutletBoundary"]
|
|
5
5
|
7:"$Sreact.suspense"
|
|
6
|
-
0:{"buildId":"
|
|
6
|
+
0:{"buildId":"VvHJmUpDhBZ-8LaJ5n-QH","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/fc2dbf641aad1448.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/1fd7f60bc5840039.js","async":true}],["$","script","script-2",{"src":"/_next/static/chunks/c1354725e21132d5.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
|
|
7
7
|
4:{}
|
|
8
8
|
5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
|
|
9
9
|
8:null
|
package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc
CHANGED
|
@@ -13,7 +13,7 @@ f:I[56978,["/_next/static/chunks/64ee9622541d967c.js"],"MetadataBoundary"]
|
|
|
13
13
|
:HL["/_next/static/chunks/00fd16d311d2adfc.css","style"]
|
|
14
14
|
:HL["/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
15
|
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
16
|
-
0:{"P":null,"b":"
|
|
16
|
+
0:{"P":null,"b":"VvHJmUpDhBZ-8LaJ5n-QH","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/00fd16d311d2adfc.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/e007ff86847a4042.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/d334b69bff7779be.js","async":true}]],"template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@8","$@9"]}}],[["$","script","script-0",{"src":"/_next/static/chunks/fc2dbf641aad1448.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/1fd7f60bc5840039.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/_next/static/chunks/c1354725e21132d5.js","async":true,"nonce":"$undefined"}]],["$","$La",null,{"children":["$","$b",null,{"name":"Next.MetadataOutlet","children":"$@c"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","div",null,{"hidden":true,"children":["$","$Lf",null,{"children":["$","$b",null,{"name":"Next.Metadata","children":"$L10"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$11",[]],"S":true}
|
|
17
17
|
8:{}
|
|
18
18
|
9:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
|
|
19
19
|
e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[56978,["/_next/static/chunks/64ee9622541d967c.js"],"ViewportBoundary"]
|
|
3
3
|
3:I[56978,["/_next/static/chunks/64ee9622541d967c.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
|
-
0:{"buildId":"
|
|
5
|
+
0:{"buildId":"VvHJmUpDhBZ-8LaJ5n-QH","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"ShieldCortex"}],["$","meta","1",{"name":"description","content":"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
|
package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc
CHANGED
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
4:I[10445,["/_next/static/chunks/e007ff86847a4042.js","/_next/static/chunks/d334b69bff7779be.js"],"default"]
|
|
5
5
|
5:I[27657,["/_next/static/chunks/64ee9622541d967c.js"],"default"]
|
|
6
6
|
:HL["/_next/static/chunks/00fd16d311d2adfc.css","style"]
|
|
7
|
-
0:{"buildId":"
|
|
7
|
+
0:{"buildId":"VvHJmUpDhBZ-8LaJ5n-QH","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/00fd16d311d2adfc.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/e007ff86847a4042.js","async":true}]],["$","html",null,{"lang":"en","className":"dark","children":["$","body",null,{"className":"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950","children":["$","$L2",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","error":"$4","errorStyles":[],"errorScripts":[["$","script","script-0",{"src":"/_next/static/chunks/d334b69bff7779be.js","async":true}]],"template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"loading":null,"isPartial":false}
|
package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
:HL["/_next/static/chunks/00fd16d311d2adfc.css","style"]
|
|
2
2
|
:HL["/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
3
3
|
:HL["/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
4
|
-
0:{"buildId":"
|
|
4
|
+
0:{"buildId":"VvHJmUpDhBZ-8LaJ5n-QH","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--VvHJmUpDhBZ_8LaJ5n_QH--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/00fd16d311d2adfc.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/da96df828f9a0188.js"/><script src="/_next/static/chunks/fc4e920d4281c89e.js" async=""></script><script src="/_next/static/chunks/d3d8171bf50ef87e.js" async=""></script><script src="/_next/static/chunks/turbopack-7cf1ece01d32a474.js" async=""></script><script src="/_next/static/chunks/e007ff86847a4042.js" async=""></script><script src="/_next/static/chunks/64ee9622541d967c.js" async=""></script><script src="/_next/static/chunks/d334b69bff7779be.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>ShieldCortex</title><meta name="description" content="AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/da96df828f9a0188.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[36111,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"Providers\"]\n3:I[57043,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n4:I[10445,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\",\"/_next/static/chunks/d334b69bff7779be.js\"],\"default\"]\n5:I[27657,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n6:I[56978,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\n9:I[56978,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"ViewportBoundary\"]\nb:I[56978,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"MetadataBoundary\"]\nd:I[30687,[\"/_next/static/chunks/e007ff86847a4042.js\",\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n:HL[\"/_next/static/chunks/00fd16d311d2adfc.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"VvHJmUpDhBZ-8LaJ5n-QH\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/00fd16d311d2adfc.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/e007ff86847a4042.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/64ee9622541d967c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased bg-slate-950\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$4\",\"errorStyles\":[],\"errorScripts\":[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/d334b69bff7779be.js\",\"async\":true}]],\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L9\",null,{\"children\":\"$La\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lc\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"8:null\nc:[[\"$\",\"title\",\"0\",{\"children\":\"ShieldCortex\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"AI Memory Security Dashboard — Defence pipeline, audit logs, quarantine review\"}]]\n"])</script></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/da96df828f9a0188.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57043,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n3:I[27657,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n4:I[56978,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[56978,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"ViewportBoundary\"]\n9:I[56978,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"MetadataBoundary\"]\nb:I[30687,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
1
|
+
<!DOCTYPE html><!--VvHJmUpDhBZ_8LaJ5n_QH--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/da96df828f9a0188.js"/><script src="/_next/static/chunks/fc4e920d4281c89e.js" async=""></script><script src="/_next/static/chunks/d3d8171bf50ef87e.js" async=""></script><script src="/_next/static/chunks/turbopack-7cf1ece01d32a474.js" async=""></script><script src="/_next/static/chunks/64ee9622541d967c.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/da96df828f9a0188.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57043,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n3:I[27657,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n4:I[56978,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[56978,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"ViewportBoundary\"]\n9:I[56978,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"MetadataBoundary\"]\nb:I[30687,[\"/_next/static/chunks/64ee9622541d967c.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"VvHJmUpDhBZ-8LaJ5n-QH\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/64ee9622541d967c.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"
|
|
1
|
+
self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"7sclCbq+uhXxf5wo/w14FCggk83q66UauZoM2EaZWaA=\"\n}"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Secrets Scanner
|
|
3
|
+
*
|
|
4
|
+
* Finds .env files that AI agents can access and scans them for
|
|
5
|
+
* exposed secrets. Claude Code, Cursor, and other agents automatically
|
|
6
|
+
* load .env files into context — .claudeignore doesn't reliably block this.
|
|
7
|
+
*
|
|
8
|
+
* Reuses the credential-leak detection from Layer 6.
|
|
9
|
+
*/
|
|
10
|
+
import type { ScannerResult } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Run the environment secrets scanner.
|
|
13
|
+
*/
|
|
14
|
+
export declare function scanEnvFiles(): ScannerResult;
|
|
15
|
+
//# sourceMappingURL=env-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-scanner.d.ts","sourceRoot":"","sources":["../../src/audit/env-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AAoL9D;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,CA0B5C"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Secrets Scanner
|
|
3
|
+
*
|
|
4
|
+
* Finds .env files that AI agents can access and scans them for
|
|
5
|
+
* exposed secrets. Claude Code, Cursor, and other agents automatically
|
|
6
|
+
* load .env files into context — .claudeignore doesn't reliably block this.
|
|
7
|
+
*
|
|
8
|
+
* Reuses the credential-leak detection from Layer 6.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
|
|
11
|
+
import { join, basename } from 'path';
|
|
12
|
+
import { homedir } from 'os';
|
|
13
|
+
import { scanForCredentials } from '../defence/credential-leak/index.js';
|
|
14
|
+
const LEARN_MORE = 'https://shieldcortex.ai/docs/threats/secret-exposure';
|
|
15
|
+
/** .env file patterns */
|
|
16
|
+
const ENV_FILE_PATTERNS = [
|
|
17
|
+
'.env',
|
|
18
|
+
'.env.local',
|
|
19
|
+
'.env.development',
|
|
20
|
+
'.env.development.local',
|
|
21
|
+
'.env.production',
|
|
22
|
+
'.env.production.local',
|
|
23
|
+
'.env.staging',
|
|
24
|
+
'.env.test',
|
|
25
|
+
'.env.test.local',
|
|
26
|
+
];
|
|
27
|
+
/** Maximum file size for env files (256 KB — they shouldn't be large) */
|
|
28
|
+
const MAX_ENV_SIZE = 256 * 1024;
|
|
29
|
+
/**
|
|
30
|
+
* Discover .env files in the current working directory and parent directories.
|
|
31
|
+
*/
|
|
32
|
+
function discoverEnvFiles() {
|
|
33
|
+
const files = [];
|
|
34
|
+
const cwd = process.cwd();
|
|
35
|
+
const home = homedir();
|
|
36
|
+
// Check CWD
|
|
37
|
+
for (const name of ENV_FILE_PATTERNS) {
|
|
38
|
+
const p = join(cwd, name);
|
|
39
|
+
try {
|
|
40
|
+
if (existsSync(p) && statSync(p).isFile() && statSync(p).size <= MAX_ENV_SIZE) {
|
|
41
|
+
files.push(p);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch { /* ignore */ }
|
|
45
|
+
}
|
|
46
|
+
// Also check common project subdirectories
|
|
47
|
+
const subdirs = ['apps', 'packages', 'services', 'backend', 'frontend', 'api', 'server', 'web', 'webapp'];
|
|
48
|
+
for (const subdir of subdirs) {
|
|
49
|
+
const dir = join(cwd, subdir);
|
|
50
|
+
try {
|
|
51
|
+
if (!existsSync(dir) || !statSync(dir).isDirectory())
|
|
52
|
+
continue;
|
|
53
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
if (entry.isDirectory()) {
|
|
56
|
+
for (const name of ENV_FILE_PATTERNS) {
|
|
57
|
+
const p = join(dir, entry.name, name);
|
|
58
|
+
try {
|
|
59
|
+
if (existsSync(p) && statSync(p).isFile() && statSync(p).size <= MAX_ENV_SIZE) {
|
|
60
|
+
files.push(p);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch { /* ignore */ }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch { /* ignore */ }
|
|
69
|
+
}
|
|
70
|
+
// Check home directory for global .env (some tools put secrets here)
|
|
71
|
+
try {
|
|
72
|
+
const homeEnv = join(home, '.env');
|
|
73
|
+
if (existsSync(homeEnv) && statSync(homeEnv).isFile() && statSync(homeEnv).size <= MAX_ENV_SIZE) {
|
|
74
|
+
files.push(homeEnv);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch { /* ignore */ }
|
|
78
|
+
return files;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if a .env file is git-ignored.
|
|
82
|
+
*/
|
|
83
|
+
function isGitIgnored(filePath) {
|
|
84
|
+
try {
|
|
85
|
+
const { execSync } = require('child_process');
|
|
86
|
+
const result = execSync(`git check-ignore -q "${filePath}" 2>/dev/null`, {
|
|
87
|
+
cwd: process.cwd(),
|
|
88
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
89
|
+
});
|
|
90
|
+
return true; // Exit code 0 means it's ignored
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false; // Exit code 1 means it's NOT ignored (or git not available)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Scan a single .env file for secrets.
|
|
98
|
+
*/
|
|
99
|
+
function scanEnvFile(filePath) {
|
|
100
|
+
const findings = [];
|
|
101
|
+
let content;
|
|
102
|
+
try {
|
|
103
|
+
content = readFileSync(filePath, 'utf-8');
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return findings;
|
|
107
|
+
}
|
|
108
|
+
if (!content.trim())
|
|
109
|
+
return findings;
|
|
110
|
+
const fileName = basename(filePath);
|
|
111
|
+
// First: warn that .env files exist and are accessible to agents
|
|
112
|
+
const isIgnored = isGitIgnored(filePath);
|
|
113
|
+
if (!isIgnored) {
|
|
114
|
+
findings.push({
|
|
115
|
+
scanner: 'env',
|
|
116
|
+
severity: 'high',
|
|
117
|
+
title: `Unprotected .env file: ${fileName}`,
|
|
118
|
+
description: 'This .env file is NOT git-ignored. It may be committed to version control and is readable by AI agents.',
|
|
119
|
+
filePath,
|
|
120
|
+
learnMoreUrl: LEARN_MORE,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Run credential detection on the file contents
|
|
124
|
+
const credResult = scanForCredentials(content);
|
|
125
|
+
if (credResult.findings.length > 0) {
|
|
126
|
+
// Group by severity for cleaner output
|
|
127
|
+
const criticalCount = credResult.findings.filter(f => f.severity === 'critical').length;
|
|
128
|
+
const highCount = credResult.findings.filter(f => f.severity === 'high').length;
|
|
129
|
+
const mediumCount = credResult.findings.filter(f => f.severity === 'medium').length;
|
|
130
|
+
if (criticalCount > 0) {
|
|
131
|
+
findings.push({
|
|
132
|
+
scanner: 'env',
|
|
133
|
+
severity: 'critical',
|
|
134
|
+
title: `${criticalCount} critical secret(s) in ${fileName}`,
|
|
135
|
+
description: `Found ${criticalCount} critical credential(s) (API keys, private keys) that AI agents can read from this file. Claude Code automatically loads .env files into context.`,
|
|
136
|
+
filePath,
|
|
137
|
+
matchedText: credResult.findings
|
|
138
|
+
.filter(f => f.severity === 'critical')
|
|
139
|
+
.map(f => `${f.provider || f.type}: ${f.match}`)
|
|
140
|
+
.slice(0, 3)
|
|
141
|
+
.join(', '),
|
|
142
|
+
learnMoreUrl: LEARN_MORE,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (highCount > 0) {
|
|
146
|
+
findings.push({
|
|
147
|
+
scanner: 'env',
|
|
148
|
+
severity: 'high',
|
|
149
|
+
title: `${highCount} high-severity secret(s) in ${fileName}`,
|
|
150
|
+
description: `Found ${highCount} high-severity credential(s) accessible to AI agents.`,
|
|
151
|
+
filePath,
|
|
152
|
+
learnMoreUrl: LEARN_MORE,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (mediumCount > 0) {
|
|
156
|
+
findings.push({
|
|
157
|
+
scanner: 'env',
|
|
158
|
+
severity: 'medium',
|
|
159
|
+
title: `${mediumCount} potential secret(s) in ${fileName}`,
|
|
160
|
+
description: `Found ${mediumCount} potential credential(s) that may be accessible to AI agents.`,
|
|
161
|
+
filePath,
|
|
162
|
+
learnMoreUrl: LEARN_MORE,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Even if no credentials detected, the fact that a .env file is accessible is noteworthy
|
|
168
|
+
findings.push({
|
|
169
|
+
scanner: 'env',
|
|
170
|
+
severity: 'info',
|
|
171
|
+
title: `Agent-accessible .env file: ${fileName}`,
|
|
172
|
+
description: 'This .env file exists and is readable by AI agents. No credentials were detected but agents may still read its contents.',
|
|
173
|
+
filePath,
|
|
174
|
+
learnMoreUrl: LEARN_MORE,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return findings;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Run the environment secrets scanner.
|
|
181
|
+
*/
|
|
182
|
+
export function scanEnvFiles() {
|
|
183
|
+
const start = Date.now();
|
|
184
|
+
const files = discoverEnvFiles();
|
|
185
|
+
if (files.length === 0) {
|
|
186
|
+
return {
|
|
187
|
+
name: 'Environment Secrets',
|
|
188
|
+
itemsScanned: 0,
|
|
189
|
+
findings: [],
|
|
190
|
+
durationMs: Date.now() - start,
|
|
191
|
+
skipped: true,
|
|
192
|
+
skipReason: 'No .env files found',
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
const allFindings = [];
|
|
196
|
+
for (const file of files) {
|
|
197
|
+
allFindings.push(...scanEnvFile(file));
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
name: 'Environment Secrets',
|
|
201
|
+
itemsScanned: files.length,
|
|
202
|
+
findings: allFindings,
|
|
203
|
+
durationMs: Date.now() - start,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=env-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-scanner.js","sourceRoot":"","sources":["../../src/audit/env-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Module — Public Exports
|
|
3
|
+
*
|
|
4
|
+
* `npx shieldcortex audit` — comprehensive security scanner for
|
|
5
|
+
* AI agent environments.
|
|
6
|
+
*/
|
|
7
|
+
export { scanMemories } from './memory-scanner.js';
|
|
8
|
+
export { scanMcpConfigs } from './mcp-config-scanner.js';
|
|
9
|
+
export { scanEnvFiles } from './env-scanner.js';
|
|
10
|
+
export { scanRulesFiles } from './rules-file-scanner.js';
|
|
11
|
+
export { formatTerminalReport, formatMarkdownReport, formatJsonReport } from './report-formatter.js';
|
|
12
|
+
export { calculateGrade } from './types.js';
|
|
13
|
+
export type { AuditFinding, AuditReport, AuditGrade, AuditSeverity, ScannerResult, } from './types.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,YAAY,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit Module — Public Exports
|
|
3
|
+
*
|
|
4
|
+
* `npx shieldcortex audit` — comprehensive security scanner for
|
|
5
|
+
* AI agent environments.
|
|
6
|
+
*/
|
|
7
|
+
export { scanMemories } from './memory-scanner.js';
|
|
8
|
+
export { scanMcpConfigs } from './mcp-config-scanner.js';
|
|
9
|
+
export { scanEnvFiles } from './env-scanner.js';
|
|
10
|
+
export { scanRulesFiles } from './rules-file-scanner.js';
|
|
11
|
+
export { formatTerminalReport, formatMarkdownReport, formatJsonReport } from './report-formatter.js';
|
|
12
|
+
export { calculateGrade } from './types.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Config Scanner
|
|
3
|
+
*
|
|
4
|
+
* Scans MCP server configuration files for:
|
|
5
|
+
* - Known-vulnerable MCP servers (e.g., mcp-remote CVE-2025-6514)
|
|
6
|
+
* - Suspicious server configurations (external URLs, unknown servers)
|
|
7
|
+
* - Servers with overly permissive permissions
|
|
8
|
+
*/
|
|
9
|
+
import type { ScannerResult } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Run the MCP config scanner.
|
|
12
|
+
*/
|
|
13
|
+
export declare function scanMcpConfigs(): ScannerResult;
|
|
14
|
+
//# sourceMappingURL=mcp-config-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config-scanner.d.ts","sourceRoot":"","sources":["../../src/audit/mcp-config-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AA4K9D;;GAEG;AACH,wBAAgB,cAAc,IAAI,aAAa,CA2B9C"}
|