shield360 1.1.0 → 1.2.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.
Files changed (393) hide show
  1. package/README.md +330 -3
  2. package/dist/__tests__/build-info.test.js +8 -1
  3. package/dist/__tests__/build-info.test.js.map +1 -1
  4. package/dist/__tests__/code-location.test.js +1 -1
  5. package/dist/__tests__/masking.test.d.ts +1 -0
  6. package/dist/__tests__/masking.test.js +66 -0
  7. package/dist/__tests__/masking.test.js.map +1 -0
  8. package/dist/__tests__/register.e2e.test.d.ts +1 -0
  9. package/dist/__tests__/register.e2e.test.js +264 -0
  10. package/dist/__tests__/register.e2e.test.js.map +1 -0
  11. package/dist/__tests__/register.test.js +60 -0
  12. package/dist/__tests__/register.test.js.map +1 -1
  13. package/dist/agents/__tests__/agents.test.d.ts +1 -0
  14. package/dist/agents/__tests__/agents.test.js +529 -0
  15. package/dist/agents/__tests__/agents.test.js.map +1 -0
  16. package/dist/agents/index.d.ts +15 -0
  17. package/dist/agents/index.js +25 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/passport.d.ts +92 -0
  20. package/dist/agents/passport.js +301 -0
  21. package/dist/agents/passport.js.map +1 -0
  22. package/dist/agents/policy.d.ts +24 -0
  23. package/dist/agents/policy.js +93 -0
  24. package/dist/agents/policy.js.map +1 -0
  25. package/dist/agents/replay.d.ts +20 -0
  26. package/dist/agents/replay.js +47 -0
  27. package/dist/agents/replay.js.map +1 -0
  28. package/dist/agents/report.d.ts +30 -0
  29. package/dist/agents/report.js +93 -0
  30. package/dist/agents/report.js.map +1 -0
  31. package/dist/agents/types.d.ts +148 -0
  32. package/dist/agents/types.js +37 -0
  33. package/dist/agents/types.js.map +1 -0
  34. package/dist/agents/verifier.d.ts +33 -0
  35. package/dist/agents/verifier.js +276 -0
  36. package/dist/agents/verifier.js.map +1 -0
  37. package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
  38. package/dist/ai-security/__tests__/bench.test.js +50 -0
  39. package/dist/ai-security/__tests__/bench.test.js.map +1 -0
  40. package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
  41. package/dist/ai-security/__tests__/checks.test.js +248 -0
  42. package/dist/ai-security/__tests__/checks.test.js.map +1 -0
  43. package/dist/ai-security/__tests__/config.test.d.ts +1 -0
  44. package/dist/ai-security/__tests__/config.test.js +164 -0
  45. package/dist/ai-security/__tests__/config.test.js.map +1 -0
  46. package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
  47. package/dist/ai-security/__tests__/detection.test.js +114 -0
  48. package/dist/ai-security/__tests__/detection.test.js.map +1 -0
  49. package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
  50. package/dist/ai-security/__tests__/fixtures.js +30 -0
  51. package/dist/ai-security/__tests__/fixtures.js.map +1 -0
  52. package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
  53. package/dist/ai-security/__tests__/hooks.test.js +174 -0
  54. package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
  55. package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
  56. package/dist/ai-security/__tests__/stream.test.js +85 -0
  57. package/dist/ai-security/__tests__/stream.test.js.map +1 -0
  58. package/dist/ai-security/config.d.ts +94 -0
  59. package/dist/ai-security/config.js +241 -0
  60. package/dist/ai-security/config.js.map +1 -0
  61. package/dist/ai-security/context.d.ts +45 -0
  62. package/dist/ai-security/context.js +108 -0
  63. package/dist/ai-security/context.js.map +1 -0
  64. package/dist/ai-security/custom-kinds.d.ts +23 -0
  65. package/dist/ai-security/custom-kinds.js +97 -0
  66. package/dist/ai-security/custom-kinds.js.map +1 -0
  67. package/dist/ai-security/events.d.ts +77 -0
  68. package/dist/ai-security/events.js +153 -0
  69. package/dist/ai-security/events.js.map +1 -0
  70. package/dist/ai-security/hooks.d.ts +48 -0
  71. package/dist/ai-security/hooks.js +461 -0
  72. package/dist/ai-security/hooks.js.map +1 -0
  73. package/dist/ai-security/index.d.ts +209 -0
  74. package/dist/ai-security/index.js +587 -0
  75. package/dist/ai-security/index.js.map +1 -0
  76. package/dist/ai-security/injection-rules.json +1024 -0
  77. package/dist/ai-security/injection.d.ts +46 -0
  78. package/dist/ai-security/injection.js +635 -0
  79. package/dist/ai-security/injection.js.map +1 -0
  80. package/dist/ai-security/jailbreak.d.ts +38 -0
  81. package/dist/ai-security/jailbreak.js +73 -0
  82. package/dist/ai-security/jailbreak.js.map +1 -0
  83. package/dist/ai-security/limits.d.ts +84 -0
  84. package/dist/ai-security/limits.js +195 -0
  85. package/dist/ai-security/limits.js.map +1 -0
  86. package/dist/ai-security/mcp.d.ts +82 -0
  87. package/dist/ai-security/mcp.js +150 -0
  88. package/dist/ai-security/mcp.js.map +1 -0
  89. package/dist/ai-security/output.d.ts +107 -0
  90. package/dist/ai-security/output.js +390 -0
  91. package/dist/ai-security/output.js.map +1 -0
  92. package/dist/ai-security/policy.d.ts +125 -0
  93. package/dist/ai-security/policy.js +196 -0
  94. package/dist/ai-security/policy.js.map +1 -0
  95. package/dist/ai-security/rag.d.ts +70 -0
  96. package/dist/ai-security/rag.js +174 -0
  97. package/dist/ai-security/rag.js.map +1 -0
  98. package/dist/ai-security/tool-rules.json +203 -0
  99. package/dist/ai-security/tools.d.ts +46 -0
  100. package/dist/ai-security/tools.js +62 -0
  101. package/dist/ai-security/tools.js.map +1 -0
  102. package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
  103. package/dist/budgets/__tests__/budgets.test.js +134 -0
  104. package/dist/budgets/__tests__/budgets.test.js.map +1 -0
  105. package/dist/budgets/auto.d.ts +25 -0
  106. package/dist/budgets/auto.js +63 -0
  107. package/dist/budgets/auto.js.map +1 -0
  108. package/dist/budgets/index.d.ts +110 -0
  109. package/dist/budgets/index.js +239 -0
  110. package/dist/budgets/index.js.map +1 -0
  111. package/dist/customer/__tests__/customer.test.d.ts +1 -0
  112. package/dist/customer/__tests__/customer.test.js +155 -0
  113. package/dist/customer/__tests__/customer.test.js.map +1 -0
  114. package/dist/customer/index.d.ts +48 -0
  115. package/dist/customer/index.js +132 -0
  116. package/dist/customer/index.js.map +1 -0
  117. package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
  118. package/dist/feedback/__tests__/feedback.test.js +80 -0
  119. package/dist/feedback/__tests__/feedback.test.js.map +1 -0
  120. package/dist/feedback/index.d.ts +48 -0
  121. package/dist/feedback/index.js +97 -0
  122. package/dist/feedback/index.js.map +1 -0
  123. package/dist/flags/__tests__/flags.test.d.ts +1 -0
  124. package/dist/flags/__tests__/flags.test.js +301 -0
  125. package/dist/flags/__tests__/flags.test.js.map +1 -0
  126. package/dist/flags/client.d.ts +131 -0
  127. package/dist/flags/client.js +301 -0
  128. package/dist/flags/client.js.map +1 -0
  129. package/dist/flags/engine.d.ts +200 -0
  130. package/dist/flags/engine.js +677 -0
  131. package/dist/flags/engine.js.map +1 -0
  132. package/dist/flags/index.d.ts +4 -0
  133. package/dist/flags/index.js +16 -0
  134. package/dist/flags/index.js.map +1 -0
  135. package/dist/guard/__tests__/findings.test.js +1 -1
  136. package/dist/guard/__tests__/report.test.js +67 -0
  137. package/dist/guard/__tests__/report.test.js.map +1 -1
  138. package/dist/guard/heartbeat.d.ts +34 -0
  139. package/dist/guard/heartbeat.js +83 -0
  140. package/dist/guard/heartbeat.js.map +1 -0
  141. package/dist/guard/integration.d.ts +9 -0
  142. package/dist/guard/integration.js +4 -2
  143. package/dist/guard/integration.js.map +1 -1
  144. package/dist/guard/report.d.ts +24 -1
  145. package/dist/guard/report.js +67 -18
  146. package/dist/guard/report.js.map +1 -1
  147. package/dist/index.d.ts +88 -0
  148. package/dist/index.js +193 -2
  149. package/dist/index.js.map +1 -1
  150. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
  151. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
  152. package/dist/instrumentation/anthropic/wrapper.js +4 -0
  153. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  154. package/dist/instrumentation/openai/wrapper.js +6 -0
  155. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  156. package/dist/masking.d.ts +42 -0
  157. package/dist/masking.js +197 -0
  158. package/dist/masking.js.map +1 -0
  159. package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
  160. package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
  161. package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
  162. package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
  163. package/dist/otel/__tests__/app-logs.test.js +269 -0
  164. package/dist/otel/__tests__/app-logs.test.js.map +1 -0
  165. package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
  166. package/dist/otel/__tests__/log-auto.test.js +125 -0
  167. package/dist/otel/__tests__/log-auto.test.js.map +1 -0
  168. package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
  169. package/dist/otel/__tests__/log-bridges.test.js +170 -0
  170. package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
  171. package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
  172. package/dist/otel/__tests__/system-metrics.test.js +79 -0
  173. package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
  174. package/dist/otel/app-logs.d.ts +80 -0
  175. package/dist/otel/app-logs.js +195 -0
  176. package/dist/otel/app-logs.js.map +1 -0
  177. package/dist/otel/build-info.d.ts +2 -1
  178. package/dist/otel/build-info.js +3 -2
  179. package/dist/otel/build-info.js.map +1 -1
  180. package/dist/otel/events.d.ts +1 -0
  181. package/dist/otel/events.js +21 -12
  182. package/dist/otel/events.js.map +1 -1
  183. package/dist/otel/log-auto.d.ts +44 -0
  184. package/dist/otel/log-auto.js +200 -0
  185. package/dist/otel/log-auto.js.map +1 -0
  186. package/dist/otel/log-bridges.d.ts +54 -0
  187. package/dist/otel/log-bridges.js +307 -0
  188. package/dist/otel/log-bridges.js.map +1 -0
  189. package/dist/otel/system-metrics.d.ts +39 -0
  190. package/dist/otel/system-metrics.js +166 -0
  191. package/dist/otel/system-metrics.js.map +1 -0
  192. package/dist/otel/tracing.js +5 -1
  193. package/dist/otel/tracing.js.map +1 -1
  194. package/dist/protect/__tests__/protect.test.js +4 -0
  195. package/dist/protect/__tests__/protect.test.js.map +1 -1
  196. package/dist/protect/index.js +9 -4
  197. package/dist/protect/index.js.map +1 -1
  198. package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
  199. package/dist/rasp/__tests__/auto-http.test.js +136 -0
  200. package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
  201. package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
  202. package/dist/rasp/__tests__/baseline.test.js +86 -0
  203. package/dist/rasp/__tests__/baseline.test.js.map +1 -0
  204. package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
  205. package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
  206. package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
  207. package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
  208. package/dist/rasp/__tests__/capture-context.test.js +135 -0
  209. package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
  210. package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
  211. package/dist/rasp/__tests__/code-hook.test.js +218 -0
  212. package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
  213. package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
  214. package/dist/rasp/__tests__/config-client.test.js +283 -0
  215. package/dist/rasp/__tests__/config-client.test.js.map +1 -0
  216. package/dist/rasp/__tests__/corpus.d.ts +13 -0
  217. package/dist/rasp/__tests__/corpus.js +111 -0
  218. package/dist/rasp/__tests__/corpus.js.map +1 -0
  219. package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
  220. package/dist/rasp/__tests__/custom-rules.test.js +276 -0
  221. package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
  222. package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
  223. package/dist/rasp/__tests__/db-hook.test.js +438 -0
  224. package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
  225. package/dist/rasp/__tests__/deception.test.d.ts +1 -0
  226. package/dist/rasp/__tests__/deception.test.js +567 -0
  227. package/dist/rasp/__tests__/deception.test.js.map +1 -0
  228. package/dist/rasp/__tests__/detect.test.d.ts +1 -0
  229. package/dist/rasp/__tests__/detect.test.js +276 -0
  230. package/dist/rasp/__tests__/detect.test.js.map +1 -0
  231. package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
  232. package/dist/rasp/__tests__/esm-exports.test.js +20 -0
  233. package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
  234. package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
  235. package/dist/rasp/__tests__/fs-hook.test.js +241 -0
  236. package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
  237. package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
  238. package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
  239. package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
  240. package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
  241. package/dist/rasp/__tests__/hook-kit.js +139 -0
  242. package/dist/rasp/__tests__/hook-kit.js.map +1 -0
  243. package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
  244. package/dist/rasp/__tests__/http-hook.test.js +250 -0
  245. package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
  246. package/dist/rasp/__tests__/iast.test.d.ts +1 -0
  247. package/dist/rasp/__tests__/iast.test.js +361 -0
  248. package/dist/rasp/__tests__/iast.test.js.map +1 -0
  249. package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
  250. package/dist/rasp/__tests__/include-hook.test.js +122 -0
  251. package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
  252. package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
  253. package/dist/rasp/__tests__/middleware.test.js +302 -0
  254. package/dist/rasp/__tests__/middleware.test.js.map +1 -0
  255. package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
  256. package/dist/rasp/__tests__/process-hook.test.js +238 -0
  257. package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
  258. package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
  259. package/dist/rasp/__tests__/reporter.test.js +114 -0
  260. package/dist/rasp/__tests__/reporter.test.js.map +1 -0
  261. package/dist/rasp/__tests__/route.test.d.ts +1 -0
  262. package/dist/rasp/__tests__/route.test.js +46 -0
  263. package/dist/rasp/__tests__/route.test.js.map +1 -0
  264. package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
  265. package/dist/rasp/__tests__/rule-expr.test.js +151 -0
  266. package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
  267. package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
  268. package/dist/rasp/__tests__/rule-phases.test.js +271 -0
  269. package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
  270. package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
  271. package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
  272. package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
  273. package/dist/rasp/__tests__/targets.test.d.ts +1 -0
  274. package/dist/rasp/__tests__/targets.test.js +82 -0
  275. package/dist/rasp/__tests__/targets.test.js.map +1 -0
  276. package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
  277. package/dist/rasp/__tests__/template-hook.test.js +254 -0
  278. package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
  279. package/dist/rasp/__tests__/upload.test.d.ts +1 -0
  280. package/dist/rasp/__tests__/upload.test.js +81 -0
  281. package/dist/rasp/__tests__/upload.test.js.map +1 -0
  282. package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
  283. package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
  284. package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
  285. package/dist/rasp/auto-http.d.ts +6 -0
  286. package/dist/rasp/auto-http.js +194 -0
  287. package/dist/rasp/auto-http.js.map +1 -0
  288. package/dist/rasp/baseline.d.ts +35 -0
  289. package/dist/rasp/baseline.js +91 -0
  290. package/dist/rasp/baseline.js.map +1 -0
  291. package/dist/rasp/capture.d.ts +76 -0
  292. package/dist/rasp/capture.js +304 -0
  293. package/dist/rasp/capture.js.map +1 -0
  294. package/dist/rasp/config-client.d.ts +122 -0
  295. package/dist/rasp/config-client.js +337 -0
  296. package/dist/rasp/config-client.js.map +1 -0
  297. package/dist/rasp/context.d.ts +65 -0
  298. package/dist/rasp/context.js +68 -0
  299. package/dist/rasp/context.js.map +1 -0
  300. package/dist/rasp/custom-rules.d.ts +68 -0
  301. package/dist/rasp/custom-rules.js +222 -0
  302. package/dist/rasp/custom-rules.js.map +1 -0
  303. package/dist/rasp/data/default-rules.json +199 -0
  304. package/dist/rasp/data/default-sinks.json +4 -0
  305. package/dist/rasp/data/dnslog-domains.json +11 -0
  306. package/dist/rasp/deception.d.ts +70 -0
  307. package/dist/rasp/deception.js +220 -0
  308. package/dist/rasp/deception.js.map +1 -0
  309. package/dist/rasp/detect.d.ts +68 -0
  310. package/dist/rasp/detect.js +671 -0
  311. package/dist/rasp/detect.js.map +1 -0
  312. package/dist/rasp/engine.d.ts +107 -0
  313. package/dist/rasp/engine.js +330 -0
  314. package/dist/rasp/engine.js.map +1 -0
  315. package/dist/rasp/hooks/code.d.ts +20 -0
  316. package/dist/rasp/hooks/code.js +334 -0
  317. package/dist/rasp/hooks/code.js.map +1 -0
  318. package/dist/rasp/hooks/db.d.ts +48 -0
  319. package/dist/rasp/hooks/db.js +322 -0
  320. package/dist/rasp/hooks/db.js.map +1 -0
  321. package/dist/rasp/hooks/esm.d.ts +7 -0
  322. package/dist/rasp/hooks/esm.js +18 -0
  323. package/dist/rasp/hooks/esm.js.map +1 -0
  324. package/dist/rasp/hooks/fs.d.ts +3 -0
  325. package/dist/rasp/hooks/fs.js +206 -0
  326. package/dist/rasp/hooks/fs.js.map +1 -0
  327. package/dist/rasp/hooks/http.d.ts +4 -0
  328. package/dist/rasp/hooks/http.js +213 -0
  329. package/dist/rasp/hooks/http.js.map +1 -0
  330. package/dist/rasp/hooks/include.d.ts +9 -0
  331. package/dist/rasp/hooks/include.js +79 -0
  332. package/dist/rasp/hooks/include.js.map +1 -0
  333. package/dist/rasp/hooks/marks.d.ts +2 -0
  334. package/dist/rasp/hooks/marks.js +16 -0
  335. package/dist/rasp/hooks/marks.js.map +1 -0
  336. package/dist/rasp/hooks/process.d.ts +22 -0
  337. package/dist/rasp/hooks/process.js +191 -0
  338. package/dist/rasp/hooks/process.js.map +1 -0
  339. package/dist/rasp/hooks/sinks.d.ts +54 -0
  340. package/dist/rasp/hooks/sinks.js +329 -0
  341. package/dist/rasp/hooks/sinks.js.map +1 -0
  342. package/dist/rasp/hooks/template.d.ts +21 -0
  343. package/dist/rasp/hooks/template.js +152 -0
  344. package/dist/rasp/hooks/template.js.map +1 -0
  345. package/dist/rasp/iast-rules.d.ts +82 -0
  346. package/dist/rasp/iast-rules.js +240 -0
  347. package/dist/rasp/iast-rules.js.map +1 -0
  348. package/dist/rasp/iast-scope.d.ts +29 -0
  349. package/dist/rasp/iast-scope.js +54 -0
  350. package/dist/rasp/iast-scope.js.map +1 -0
  351. package/dist/rasp/iast.d.ts +81 -0
  352. package/dist/rasp/iast.js +272 -0
  353. package/dist/rasp/iast.js.map +1 -0
  354. package/dist/rasp/index.d.ts +52 -0
  355. package/dist/rasp/index.js +280 -0
  356. package/dist/rasp/index.js.map +1 -0
  357. package/dist/rasp/lexers.d.ts +32 -0
  358. package/dist/rasp/lexers.js +444 -0
  359. package/dist/rasp/lexers.js.map +1 -0
  360. package/dist/rasp/middleware.d.ts +155 -0
  361. package/dist/rasp/middleware.js +568 -0
  362. package/dist/rasp/middleware.js.map +1 -0
  363. package/dist/rasp/model-output.d.ts +14 -0
  364. package/dist/rasp/model-output.js +107 -0
  365. package/dist/rasp/model-output.js.map +1 -0
  366. package/dist/rasp/normalize.d.ts +23 -0
  367. package/dist/rasp/normalize.js +140 -0
  368. package/dist/rasp/normalize.js.map +1 -0
  369. package/dist/rasp/reporter.d.ts +60 -0
  370. package/dist/rasp/reporter.js +230 -0
  371. package/dist/rasp/reporter.js.map +1 -0
  372. package/dist/rasp/rule-expr.d.ts +236 -0
  373. package/dist/rasp/rule-expr.js +1253 -0
  374. package/dist/rasp/rule-expr.js.map +1 -0
  375. package/dist/rasp/template.d.ts +53 -0
  376. package/dist/rasp/template.js +336 -0
  377. package/dist/rasp/template.js.map +1 -0
  378. package/dist/rasp/types.d.ts +110 -0
  379. package/dist/rasp/types.js +51 -0
  380. package/dist/rasp/types.js.map +1 -0
  381. package/dist/rasp/vpatch.d.ts +55 -0
  382. package/dist/rasp/vpatch.js +120 -0
  383. package/dist/rasp/vpatch.js.map +1 -0
  384. package/dist/register.js +52 -11
  385. package/dist/register.js.map +1 -1
  386. package/dist/semantic-convention.d.ts +2 -0
  387. package/dist/semantic-convention.js +5 -0
  388. package/dist/semantic-convention.js.map +1 -1
  389. package/dist/types.d.ts +75 -1
  390. package/dist/zero-code.d.ts +8 -0
  391. package/dist/zero-code.js +38 -0
  392. package/dist/zero-code.js.map +1 -0
  393. package/package.json +18 -2
@@ -0,0 +1,334 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RaspCodeInstrumentation = exports.unpatchLibxmljs2 = exports.patchLibxmljs2 = exports.unpatchLibxmljs = exports.patchLibxmljs = exports.unpatchJsYaml = exports.patchJsYaml = exports.unpatchFuncster = exports.patchFuncster = exports.unpatchNodeSerialize = exports.patchNodeSerialize = void 0;
4
+ exports.installCodeHooks = installCodeHooks;
5
+ exports.uninstallCodeHooks = uninstallCodeHooks;
6
+ exports.patchLoaded = patchLoaded;
7
+ /**
8
+ * Code, deserialization, XML and response sink hooks (README "Code",
9
+ * "Deserialization", "XXE", "XSS"): `vm` and the `Function` constructor are
10
+ * checked for tainted code, node-serialize, funcster and js-yaml (unsafe
11
+ * schemas) for tainted data, libxmljs for external entities, and HTML
12
+ * responses for reflected input (monitor only). Drafted with ChatGPT,
13
+ * reviewed and adapted by the repository owner.
14
+ *
15
+ * `eval` is deliberately not hooked: a call is direct eval (with the
16
+ * caller's local scope) only when `eval` is the built-in itself, so
17
+ * replacing `globalThis.eval` would turn every direct `eval(x)` in the app
18
+ * into a global-scope evaluation and break it (webpack's eval source maps,
19
+ * for one). The `Function` hook covers `Function(...)` and `new Function`,
20
+ * not `(function () {}).constructor(...)`.
21
+ */
22
+ // SHIELD: optional template-source sinks share the code-hook lifecycle.
23
+ const template_1 = require("./template");
24
+ const vm = require("vm");
25
+ const http = require("http");
26
+ const module_1 = require("module");
27
+ const string_decoder_1 = require("string_decoder");
28
+ const instrumentation_1 = require("@opentelemetry/instrumentation");
29
+ const context_1 = require("../context");
30
+ const engine_1 = require("../engine");
31
+ const detect_1 = require("../detect");
32
+ const types_1 = require("../types");
33
+ const marks_1 = require("./marks");
34
+ const esm_1 = require("./esm");
35
+ const registry = new Map();
36
+ let builtins;
37
+ let checking = false;
38
+ // No "inside a wrapped call" skip: code run by vm runs inside the original
39
+ // call, and its own vm/Function calls must still be checked.
40
+ function inspect(sink, run) {
41
+ if (checking)
42
+ return;
43
+ try {
44
+ if (!(0, engine_1.isActive)())
45
+ return;
46
+ checking = true;
47
+ const ctx = (0, context_1.currentContext)();
48
+ const all = ctx ? (0, context_1.inputsOf)(ctx) : [];
49
+ // SHIELD: code generated from a template source was judged by the template check; other input is not.
50
+ const inputs = sink === 'Function' || sink.startsWith('vm.') ? (0, template_1.unjudgedInputs)(all) : all;
51
+ if (inputs.length)
52
+ (0, engine_1.check)(sink, () => run(inputs));
53
+ }
54
+ catch (error) {
55
+ if (error instanceof types_1.RaspBlockedError)
56
+ throw error;
57
+ }
58
+ finally {
59
+ checking = false;
60
+ }
61
+ }
62
+ function copy(original, wrapper) {
63
+ for (const key of Reflect.ownKeys(original)) {
64
+ // Shimmer metadata must stay private to the tracing wrapper underneath us.
65
+ if (key === '__wrapped' || key === '__original' || key === '__unwrap')
66
+ continue;
67
+ Object.defineProperty(wrapper, key, Object.getOwnPropertyDescriptor(original, key));
68
+ }
69
+ }
70
+ function wrap(owner, key, before) {
71
+ let methods = registry.get(owner);
72
+ const known = methods?.get(key);
73
+ if (known) {
74
+ known.on = true;
75
+ return known;
76
+ }
77
+ const descriptor = Object.getOwnPropertyDescriptor(owner, key);
78
+ if (!descriptor || typeof descriptor.value !== 'function')
79
+ return;
80
+ const original = descriptor.value;
81
+ const entry = { owner, key, descriptor, wrapper: original, on: true };
82
+ const wrapper = function (...values) {
83
+ if (entry.on)
84
+ before(values);
85
+ return new.target ? Reflect.construct(original, values, new.target) : Reflect.apply(original, this, values);
86
+ };
87
+ copy(original, wrapper);
88
+ entry.wrapper = wrapper;
89
+ (0, marks_1.markRaspWrapper)(wrapper);
90
+ Object.defineProperty(owner, key, { ...descriptor, value: wrapper });
91
+ if (!methods)
92
+ registry.set(owner, methods = new Map());
93
+ methods.set(key, entry);
94
+ return entry;
95
+ }
96
+ function restore(entry) {
97
+ entry.on = false;
98
+ if (Reflect.get(entry.owner, entry.key) === entry.wrapper) {
99
+ // No descriptor: RASP added the property itself (ServerResponse write/end), so remove it.
100
+ if (entry.descriptor)
101
+ Object.defineProperty(entry.owner, entry.key, entry.descriptor);
102
+ else
103
+ delete entry.owner[entry.key];
104
+ registry.get(entry.owner)?.delete(entry.key);
105
+ if (!registry.get(entry.owner)?.size)
106
+ registry.delete(entry.owner);
107
+ }
108
+ }
109
+ const MAX_BODY = 1024 * 1024;
110
+ let bodies = new WeakMap();
111
+ function response(res, values, end) {
112
+ if (checking)
113
+ return;
114
+ try {
115
+ if (!(0, engine_1.isActive)())
116
+ return;
117
+ const type = res.getHeader('content-type');
118
+ if (typeof type !== 'string' || !type.toLowerCase().includes('html'))
119
+ return;
120
+ let body = bodies.get(res);
121
+ if (!body) {
122
+ const ctx = (0, context_1.currentContext)();
123
+ const inputs = ctx ? (0, context_1.inputsOf)(ctx).map((input) => ({ ...input })) : [];
124
+ // Nothing to compare against: do not collect the body at all.
125
+ body = { inputs, chunks: [], bytes: 0, stopped: !inputs.length, decoder: new string_decoder_1.StringDecoder('utf8') };
126
+ bodies.set(res, body);
127
+ }
128
+ const chunk = values[0];
129
+ if (!body.stopped && (typeof chunk === 'string' || Buffer.isBuffer(chunk))) {
130
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, typeof values[1] === 'string' ? values[1] : 'utf8');
131
+ body.bytes += buffer.length;
132
+ if (body.bytes > MAX_BODY) {
133
+ body.stopped = true;
134
+ body.chunks = [];
135
+ }
136
+ else
137
+ body.chunks.push(body.decoder.write(buffer));
138
+ }
139
+ if (end) {
140
+ bodies.delete(res);
141
+ if (!body.stopped && body.inputs.length) {
142
+ checking = true;
143
+ try {
144
+ const text = body.chunks.join('') + body.decoder.end();
145
+ (0, engine_1.check)('http.response', () => (0, detect_1.detectXss)(type, text, body.inputs));
146
+ }
147
+ finally {
148
+ checking = false;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ catch { /* A response must never be changed or blocked by monitoring. */ }
154
+ }
155
+ function installCodeHooks() {
156
+ if (builtins)
157
+ return true;
158
+ const saved = [];
159
+ try {
160
+ const add = (owner, key, before) => {
161
+ const entry = wrap(owner, key, before);
162
+ if (!entry)
163
+ throw new TypeError(key);
164
+ saved.push(entry);
165
+ };
166
+ for (const key of ['runInThisContext', 'runInNewContext', 'runInContext', 'compileFunction', 'Script']) {
167
+ add(vm, key, values => inspect(`vm.${key}`, inputs => typeof values[0] === 'string' ? (0, detect_1.detectCode)(values[0], inputs) : null));
168
+ }
169
+ const functionDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'Function');
170
+ if (functionDescriptor?.configurable)
171
+ add(globalThis, 'Function', values => inspect('Function', inputs => {
172
+ const body = values[values.length - 1];
173
+ const finding = typeof body === 'string' ? (0, detect_1.detectCode)(body, inputs) : null;
174
+ if (finding)
175
+ return finding;
176
+ const params = values.slice(0, -1);
177
+ return params.length && params.every(value => typeof value === 'string') ? (0, detect_1.detectCode)(params.join(','), inputs) : null;
178
+ }));
179
+ // write/end live on OutgoingMessage.prototype (shared with client
180
+ // requests): RASP adds its own on ServerResponse.prototype, calling
181
+ // whatever is inherited, and removes them again on uninstall.
182
+ const proto = http.ServerResponse.prototype;
183
+ for (const key of ['write', 'end']) {
184
+ if (Object.prototype.hasOwnProperty.call(proto, key) || typeof Reflect.get(proto, key) !== 'function')
185
+ continue;
186
+ const inherited = Reflect.get(Object.getPrototypeOf(proto), key);
187
+ const wrapper = function (...values) {
188
+ if (entry.on)
189
+ response(this, values, key === 'end');
190
+ return Reflect.apply(Reflect.get(Object.getPrototypeOf(proto), key), this, values);
191
+ };
192
+ copy(inherited, wrapper);
193
+ Object.defineProperty(proto, key, { value: wrapper, writable: true, configurable: true, enumerable: false });
194
+ const entry = { owner: proto, key, wrapper, on: true };
195
+ saved.push(entry);
196
+ }
197
+ instrumentation = new RaspCodeInstrumentation();
198
+ instrumentation.enable();
199
+ patchLoaded();
200
+ (0, template_1.installTemplateHooks)(); // SHIELD: patch only imported template engines.
201
+ (0, module_1.syncBuiltinESMExports)();
202
+ builtins = saved;
203
+ return true;
204
+ }
205
+ catch {
206
+ (0, template_1.uninstallTemplateHooks)(); // SHIELD: roll back optional template hooks.
207
+ try {
208
+ instrumentation?.disable();
209
+ }
210
+ catch { /* Never throw. */ }
211
+ instrumentation = undefined;
212
+ for (const entry of saved.reverse()) {
213
+ try {
214
+ restore(entry);
215
+ }
216
+ catch { /* Never throw. */ }
217
+ }
218
+ try {
219
+ (0, module_1.syncBuiltinESMExports)();
220
+ }
221
+ catch { /* Never throw. */ }
222
+ return false;
223
+ }
224
+ }
225
+ function uninstallCodeHooks() {
226
+ (0, template_1.uninstallTemplateHooks)(); // SHIELD: invalidate template generations.
227
+ for (const entry of builtins ?? []) {
228
+ try {
229
+ restore(entry);
230
+ }
231
+ catch { /* Never throw. */ }
232
+ }
233
+ builtins = undefined;
234
+ bodies = new WeakMap();
235
+ try {
236
+ instrumentation?.disable();
237
+ }
238
+ catch { /* Never throw. */ }
239
+ instrumentation = undefined;
240
+ for (const methods of [...registry.values()])
241
+ for (const entry of [...methods.values()]) {
242
+ try {
243
+ restore(entry);
244
+ }
245
+ catch { /* Never throw. */ }
246
+ }
247
+ try {
248
+ (0, module_1.syncBuiltinESMExports)();
249
+ }
250
+ catch { /* Never throw. */ }
251
+ }
252
+ function patch(library, exports, version) {
253
+ try {
254
+ if (!exports || (typeof exports !== 'object' && typeof exports !== 'function'))
255
+ return;
256
+ const module = exports;
257
+ const methods = library === 'node-serialize' ? ['unserialize'] : library === 'funcster' ? ['deepDeserialize']
258
+ : library === 'js-yaml' ? ['load', 'loadAll'] : ['parseXml', 'parseXmlString'];
259
+ for (const method of methods)
260
+ wrap(module, method, values => inspect(`${library}.${method}`, inputs => {
261
+ if (library === 'node-serialize')
262
+ return (0, detect_1.detectDeserialization)('node_serialize', String(values[0]), inputs);
263
+ if (library === 'funcster') {
264
+ const text = typeof values[0] === 'string' ? values[0] : JSON.stringify(values[0]);
265
+ return typeof text === 'string' ? (0, detect_1.detectDeserialization)('funcster', text, inputs) : null;
266
+ }
267
+ if (typeof values[0] !== 'string')
268
+ return null;
269
+ if (library === 'js-yaml') {
270
+ const options = (method === 'loadAll' && typeof values[1] === 'function' ? values[2] : values[1]);
271
+ const schema = options?.schema;
272
+ const major = version ? Number(version.split('.')[0]) : module.DEFAULT_FULL_SCHEMA ? 3 : 4;
273
+ const unsafe = major < 4 ? !schema || schema === module.DEFAULT_FULL_SCHEMA
274
+ : Boolean(schema && !['DEFAULT_SCHEMA', 'CORE_SCHEMA', 'JSON_SCHEMA', 'FAILSAFE_SCHEMA'].some(key => schema === module[key]));
275
+ return unsafe ? (0, detect_1.detectDeserialization)('yaml', values[0], inputs) : null;
276
+ }
277
+ const options = values[1];
278
+ return (0, detect_1.detectXml)(values[0], inputs, Boolean(options && (options.noent || options.dtdload)));
279
+ }));
280
+ }
281
+ catch { /* Optional library or unsupported shape. */ }
282
+ }
283
+ function unpatch(exports) {
284
+ const methods = registry.get(exports);
285
+ for (const entry of [...(methods?.values() ?? [])]) {
286
+ try {
287
+ restore(entry);
288
+ }
289
+ catch { /* Fail open. */ }
290
+ }
291
+ }
292
+ const patchNodeSerialize = (exports) => patch('node-serialize', exports);
293
+ exports.patchNodeSerialize = patchNodeSerialize;
294
+ exports.unpatchNodeSerialize = unpatch;
295
+ const patchFuncster = (exports) => patch('funcster', exports);
296
+ exports.patchFuncster = patchFuncster;
297
+ exports.unpatchFuncster = unpatch;
298
+ const patchJsYaml = (exports, version) => patch('js-yaml', exports, version);
299
+ exports.patchJsYaml = patchJsYaml;
300
+ exports.unpatchJsYaml = unpatch;
301
+ const patchLibxmljs = (exports) => patch('libxmljs', exports);
302
+ exports.patchLibxmljs = patchLibxmljs;
303
+ exports.unpatchLibxmljs = unpatch;
304
+ const patchLibxmljs2 = (exports) => patch('libxmljs2', exports);
305
+ exports.patchLibxmljs2 = patchLibxmljs2;
306
+ exports.unpatchLibxmljs2 = unpatch;
307
+ const libraries = ['node-serialize', 'funcster', 'js-yaml', 'libxmljs', 'libxmljs2'];
308
+ class RaspCodeInstrumentation extends instrumentation_1.InstrumentationBase {
309
+ constructor() { super('shield360/instrumentation-rasp-code', '1.0.0', { enabled: false }); }
310
+ init() {
311
+ return libraries.map(name => new instrumentation_1.InstrumentationNodeModuleDefinition(name, ['*'], (exports, version) => { patch(name, (0, esm_1.moduleExports)(exports), version); return exports; }, exports => unpatch((0, esm_1.moduleExports)(exports))));
312
+ }
313
+ }
314
+ exports.RaspCodeInstrumentation = RaspCodeInstrumentation;
315
+ let instrumentation;
316
+ function patchLoaded() {
317
+ for (const library of libraries) {
318
+ try {
319
+ const id = require.resolve(library);
320
+ const cached = require.cache[id];
321
+ if (cached) {
322
+ let version;
323
+ try {
324
+ const manifest = require.cache[require.resolve(`${library}/package.json`)];
325
+ version = manifest?.exports?.version;
326
+ }
327
+ catch { /* Schema exports distinguish legacy js-yaml without loading it. */ }
328
+ patch(library, cached.exports, version);
329
+ }
330
+ }
331
+ catch { /* Never load an optional library. */ }
332
+ }
333
+ }
334
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../../src/rasp/hooks/code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Database sink hook (README "SQL", "NoSQL"): SQL text sent through pg,
3
+ * mysql2, mysql, sqlite3, better-sqlite3, mssql, tedious (SQL Server),
4
+ * oracledb (Oracle) and ibm_db (Db2), and MongoDB filter,
5
+ * update and pipeline documents, are checked for injection before the
6
+ * driver sends them. Drivers are hooked by name when the app loads them; no
7
+ * driver is imported. Drafted with ChatGPT, reviewed and adapted by the
8
+ * repository owner.
9
+ *
10
+ * Wrappers are RASP's own, not shimmer's: the SDK's tracing (and other
11
+ * OpenTelemetry instrumentations) wrap the same methods with shimmer, which
12
+ * unwraps whatever shimmer-wrapped method it finds. Kept apart, the two
13
+ * stack in either order and neither removes the other.
14
+ */
15
+ import { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';
16
+ type Driver = 'pg' | 'mysql2' | 'mysql' | 'sqlite3' | 'better-sqlite3' | 'mssql' | 'tedious' | 'oracledb' | 'ibm_db' | 'mongodb';
17
+ export declare class RaspDbInstrumentation extends InstrumentationBase {
18
+ constructor();
19
+ protected init(): InstrumentationNodeModuleDefinition[];
20
+ patch(driver: Driver, exports: unknown): void;
21
+ unpatch(driver: Driver, exports: unknown): void;
22
+ restoreAll(): void;
23
+ }
24
+ export declare const patchPg: (exports: unknown) => void;
25
+ export declare const unpatchPg: (exports: unknown) => void;
26
+ export declare const patchMysql2: (exports: unknown) => void;
27
+ export declare const unpatchMysql2: (exports: unknown) => void;
28
+ export declare const patchMysql: (exports: unknown) => void;
29
+ export declare const unpatchMysql: (exports: unknown) => void;
30
+ export declare const patchSqlite3: (exports: unknown) => void;
31
+ export declare const unpatchSqlite3: (exports: unknown) => void;
32
+ export declare const patchBetterSqlite3: (exports: unknown) => void;
33
+ export declare const unpatchBetterSqlite3: (exports: unknown) => void;
34
+ export declare const patchMssql: (exports: unknown) => void;
35
+ export declare const unpatchMssql: (exports: unknown) => void;
36
+ export declare const patchTedious: (exports: unknown) => void;
37
+ export declare const unpatchTedious: (exports: unknown) => void;
38
+ export declare const patchOracledb: (exports: unknown) => void;
39
+ export declare const unpatchOracledb: (exports: unknown) => void;
40
+ export declare const patchIbmDb: (exports: unknown) => void;
41
+ export declare const unpatchIbmDb: (exports: unknown) => void;
42
+ export declare const patchMongodb: (exports: unknown) => void;
43
+ export declare const unpatchMongodb: (exports: unknown) => void;
44
+ /** Inspect the cache only: resolving a driver never executes its code. */
45
+ export declare function patchLoaded(): void;
46
+ export declare function installDbHooks(): boolean;
47
+ export declare function uninstallDbHooks(): void;
48
+ export {};