@blamejs/exceptd-skills 0.13.113 → 0.13.115

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.
@@ -52,6 +52,7 @@
52
52
  "CVE-2024-11393",
53
53
  "CVE-2024-11394",
54
54
  "CVE-2024-12366",
55
+ "CVE-2024-12776",
55
56
  "CVE-2024-13059",
56
57
  "CVE-2024-1561",
57
58
  "CVE-2024-21575",
@@ -73,6 +74,7 @@
73
74
  "CVE-2024-9526",
74
75
  "CVE-2025-1550",
75
76
  "CVE-2025-1753",
77
+ "CVE-2025-1796",
76
78
  "CVE-2025-23254",
77
79
  "CVE-2025-23266",
78
80
  "CVE-2025-25297",
@@ -112,6 +114,8 @@
112
114
  "CVE-2026-33017",
113
115
  "CVE-2026-34159",
114
116
  "CVE-2026-40933",
117
+ "CVE-2026-41947",
118
+ "CVE-2026-41950",
115
119
  "CVE-2026-45829"
116
120
  ],
117
121
  "atlas_refs": [
@@ -2219,6 +2223,8 @@
2219
2223
  "CVE-2023-47117",
2220
2224
  "CVE-2025-14847",
2221
2225
  "CVE-2025-22226",
2226
+ "CVE-2026-41947",
2227
+ "CVE-2026-41950",
2222
2228
  "CVE-2026-43284"
2223
2229
  ],
2224
2230
  "atlas_refs": [],
@@ -3875,12 +3881,16 @@
3875
3881
  "CVE-2023-48022",
3876
3882
  "CVE-2023-6019",
3877
3883
  "CVE-2023-6021",
3884
+ "CVE-2024-12776",
3878
3885
  "CVE-2024-4889",
3879
3886
  "CVE-2024-6587",
3887
+ "CVE-2025-1796",
3880
3888
  "CVE-2025-64513",
3881
3889
  "CVE-2026-24206",
3882
3890
  "CVE-2026-24207",
3883
- "CVE-2026-26190"
3891
+ "CVE-2026-26190",
3892
+ "CVE-2026-41947",
3893
+ "CVE-2026-41950"
3884
3894
  ],
3885
3895
  "atlas_refs": [
3886
3896
  "AML.T0010",
@@ -5114,6 +5124,7 @@
5114
5124
  "CVE-2024-11393",
5115
5125
  "CVE-2024-11394",
5116
5126
  "CVE-2024-12366",
5127
+ "CVE-2024-12776",
5117
5128
  "CVE-2024-13059",
5118
5129
  "CVE-2024-1561",
5119
5130
  "CVE-2024-21513",
@@ -5137,6 +5148,7 @@
5137
5148
  "CVE-2024-9526",
5138
5149
  "CVE-2025-1550",
5139
5150
  "CVE-2025-1753",
5151
+ "CVE-2025-1796",
5140
5152
  "CVE-2025-23254",
5141
5153
  "CVE-2025-23266",
5142
5154
  "CVE-2025-25297",
@@ -5181,6 +5193,8 @@
5181
5193
  "CVE-2026-34926",
5182
5194
  "CVE-2026-40933",
5183
5195
  "CVE-2026-41091",
5196
+ "CVE-2026-41947",
5197
+ "CVE-2026-41950",
5184
5198
  "CVE-2026-42897",
5185
5199
  "CVE-2026-42945",
5186
5200
  "CVE-2026-45498",
@@ -5225,13 +5239,17 @@
5225
5239
  "CVE-2023-43791",
5226
5240
  "CVE-2023-47117",
5227
5241
  "CVE-2023-6038",
5242
+ "CVE-2024-12776",
5228
5243
  "CVE-2024-1709",
5244
+ "CVE-2025-1796",
5229
5245
  "CVE-2025-25297",
5230
5246
  "CVE-2025-3248",
5231
5247
  "CVE-2025-3466",
5232
5248
  "CVE-2025-56520",
5233
5249
  "CVE-2026-33017",
5234
5250
  "CVE-2026-39987",
5251
+ "CVE-2026-41947",
5252
+ "CVE-2026-41950",
5235
5253
  "CVE-2026-7482"
5236
5254
  ],
5237
5255
  "atlas_refs": [
@@ -5489,6 +5507,8 @@
5489
5507
  "CVE-2026-3909",
5490
5508
  "CVE-2026-3910",
5491
5509
  "CVE-2026-41940",
5510
+ "CVE-2026-41947",
5511
+ "CVE-2026-41950",
5492
5512
  "CVE-2026-6973"
5493
5513
  ],
5494
5514
  "atlas_refs": [],
@@ -5526,8 +5546,12 @@
5526
5546
  "CVE-2023-47117",
5527
5547
  "CVE-2023-6016",
5528
5548
  "CVE-2023-6038",
5549
+ "CVE-2024-12776",
5550
+ "CVE-2025-1796",
5529
5551
  "CVE-2025-3248",
5530
5552
  "CVE-2026-33017",
5553
+ "CVE-2026-41947",
5554
+ "CVE-2026-41950",
5531
5555
  "CVE-2026-6973"
5532
5556
  ],
5533
5557
  "atlas_refs": [],
@@ -5815,6 +5839,7 @@
5815
5839
  "CVE-2024-11393",
5816
5840
  "CVE-2024-11394",
5817
5841
  "CVE-2024-12366",
5842
+ "CVE-2024-12776",
5818
5843
  "CVE-2024-13059",
5819
5844
  "CVE-2024-1561",
5820
5845
  "CVE-2024-21513",
@@ -5838,6 +5863,7 @@
5838
5863
  "CVE-2024-9526",
5839
5864
  "CVE-2025-1550",
5840
5865
  "CVE-2025-1753",
5866
+ "CVE-2025-1796",
5841
5867
  "CVE-2025-23254",
5842
5868
  "CVE-2025-23266",
5843
5869
  "CVE-2025-25297",
@@ -5880,6 +5906,8 @@
5880
5906
  "CVE-2026-34926",
5881
5907
  "CVE-2026-40933",
5882
5908
  "CVE-2026-41091",
5909
+ "CVE-2026-41947",
5910
+ "CVE-2026-41950",
5883
5911
  "CVE-2026-45498",
5884
5912
  "CVE-2026-45829",
5885
5913
  "CVE-2026-46300",
@@ -6097,11 +6125,15 @@
6097
6125
  "CVE-2023-47117",
6098
6126
  "CVE-2023-48022",
6099
6127
  "CVE-2023-6038",
6128
+ "CVE-2024-12776",
6129
+ "CVE-2025-1796",
6100
6130
  "CVE-2025-3248",
6101
6131
  "CVE-2025-55241",
6102
6132
  "CVE-2026-24206",
6103
6133
  "CVE-2026-24207",
6104
- "CVE-2026-33017"
6134
+ "CVE-2026-33017",
6135
+ "CVE-2026-41947",
6136
+ "CVE-2026-41950"
6105
6137
  ],
6106
6138
  "atlas_refs": [],
6107
6139
  "attack_refs": [
@@ -6173,10 +6205,12 @@
6173
6205
  "CVE-2023-6019",
6174
6206
  "CVE-2023-6021",
6175
6207
  "CVE-2023-6038",
6208
+ "CVE-2024-12776",
6176
6209
  "CVE-2024-1709",
6177
6210
  "CVE-2024-2912",
6178
6211
  "CVE-2024-4889",
6179
6212
  "CVE-2024-6587",
6213
+ "CVE-2025-1796",
6180
6214
  "CVE-2025-27520",
6181
6215
  "CVE-2025-3248",
6182
6216
  "CVE-2025-64513",
@@ -4811,6 +4811,206 @@
4811
4811
  "_auto_imported": false,
4812
4812
  "_intake_method": "manual-verified-curation"
4813
4813
  },
4814
+ "CVE-2025-1796": {
4815
+ "name": "Dify Weak-PRNG Password Reset Account Takeover",
4816
+ "lesson_date": "2026-05-26",
4817
+ "attack_vector": {
4818
+ "description": "Dify generates password-reset codes with a weak PRNG (random.randint) rather than a cryptographically secure RNG, so an attacker predicts the reset code and takes over any account, including administrators.",
4819
+ "privileges_required": "low (an account to trigger the predictable reset; takeover reaches admin)",
4820
+ "complexity": "low",
4821
+ "ai_factor": "The abused surface is Dify, a low-code LLM application-development platform. The lesson: an AI app's password-recovery flow is an authentication-integrity control - the predictable reset-code half of a takeover chain that ends in full admin control; reset tokens must be CSPRNG-generated AND verified server-side."
4822
+ },
4823
+ "framework_coverage": {
4824
+ "NIST-800-53-IA-2": {
4825
+ "covered": true,
4826
+ "adequate": false,
4827
+ "gap": "The LLM app's password-recovery flow lets an attacker authenticate as any user, including admin."
4828
+ },
4829
+ "NIST-800-53-AC-3": {
4830
+ "covered": true,
4831
+ "adequate": false,
4832
+ "gap": "A predictable reset code grants control of any account."
4833
+ },
4834
+ "ALL-AI-PIPELINE-INTEGRITY": {
4835
+ "covered": false,
4836
+ "adequate": false,
4837
+ "gap": "No framework treats an LLM app platform's password-recovery flow as an authentication-integrity control whose failure yields full account takeover."
4838
+ }
4839
+ },
4840
+ "compliance_exposure_score": {
4841
+ "percent_audit_passing_orgs_still_exposed": 82,
4842
+ "basis": "LLM app platforms ship self-service password recovery; reset-token generation and verification are rarely audited, and weak PRNG / missing verification persist.",
4843
+ "theater_pattern": "ai_app_weak_password_recovery"
4844
+ },
4845
+ "ai_discovered_zeroday": false,
4846
+ "ai_discovery_source": "human_researcher",
4847
+ "ai_assist_factor": "none",
4848
+ "new_control_requirements": [
4849
+ {
4850
+ "id": "NEW-CTRL-108",
4851
+ "name": "AI-APP-PASSWORD-RECOVERY-INTEGRITY",
4852
+ "description": "An AI application's password-reset / account-recovery flow must (1) generate reset tokens with a cryptographically secure RNG (e.g. secrets / os.urandom - never random.randint or another predictable PRNG), making them long, single-use, and short-lived; and (2) verify the reset token server-side, bound to the requesting account, before accepting a new password - the reset endpoint must never perform a reset without a valid, matching, unexpired token. Rate-limit reset attempts. The distinguishing test: on a staging instance, request a reset and confirm the code is unpredictable across requests, and confirm POSTing to the reset endpoint with a wrong/absent code is rejected - an AI app whose recovery flow uses a weak PRNG or skips token verification permits takeover of any account, including administrators.",
4853
+ "evidence": "https://github.com/advisories/GHSA-cvg9-334x-w586",
4854
+ "gap_closes": [
4855
+ "NIST-800-53-IA-2",
4856
+ "NIST-800-53-AC-3",
4857
+ "ALL-AI-PIPELINE-INTEGRITY"
4858
+ ]
4859
+ }
4860
+ ],
4861
+ "_auto_imported": false,
4862
+ "_intake_method": "manual-verified-curation"
4863
+ },
4864
+ "CVE-2026-41947": {
4865
+ "name": "Dify Trace-Config Cross-Tenant Authorization Bypass",
4866
+ "lesson_date": "2026-05-26",
4867
+ "attack_vector": {
4868
+ "description": "Dify's trace-configuration endpoints do not verify tenant ownership, so an authenticated editor user configures trace settings for any application and can redirect victim trace data to an attacker-controlled provider.",
4869
+ "privileges_required": "low (an authenticated editor account)",
4870
+ "complexity": "low",
4871
+ "ai_factor": "The abused surface is Dify, a low-code LLM application-development platform. The lesson: an LLM app platform's API must enforce object-level authorization (ownership of the tenant/application/file referenced by a caller-supplied key) on every request - here a user-controlled key bypassed it for cross-tenant trace-config tampering / data redirect."
4872
+ },
4873
+ "framework_coverage": {
4874
+ "NIST-800-53-AC-3": {
4875
+ "covered": true,
4876
+ "adequate": false,
4877
+ "gap": "Access enforcement does not verify ownership of the object referenced by a caller-supplied key (CWE-639)."
4878
+ },
4879
+ "NIST-800-53-SC-28": {
4880
+ "covered": true,
4881
+ "adequate": false,
4882
+ "gap": "Data is reachable cross-tenant/cross-user via a user-controlled key without an ownership check."
4883
+ },
4884
+ "ALL-AI-PIPELINE-INTEGRITY": {
4885
+ "covered": false,
4886
+ "adequate": false,
4887
+ "gap": "No framework treats an LLM app platform's object-level authorization as an integrity control whose absence yields cross-tenant/user access."
4888
+ }
4889
+ },
4890
+ "compliance_exposure_score": {
4891
+ "percent_audit_passing_orgs_still_exposed": 80,
4892
+ "basis": "Multi-tenant LLM app platforms expose rich object-referencing APIs; ownership checks on user-controlled keys (tenant/app/file ids) are frequently missing and rarely audited.",
4893
+ "theater_pattern": "ai_app_broken_object_authorization"
4894
+ },
4895
+ "ai_discovered_zeroday": false,
4896
+ "ai_discovery_source": "human_researcher",
4897
+ "ai_assist_factor": "none",
4898
+ "new_control_requirements": [
4899
+ {
4900
+ "id": "NEW-CTRL-106",
4901
+ "name": "AI-APP-API-OBJECT-AUTHORIZATION-AND-FIELD-EXPOSURE",
4902
+ "description": "An AI data-platform API (data-labeling, annotation, dataset/registry services) must enforce object-level authorization on every read and must never expose sensitive fields - secrets, session-signing keys, auth tokens, password hashes - through API responses, serializers, or user-controlled query/filter expressions. Use serializer field allowlists (never blanket model serialization), reject ORM/filter inputs that reference fields the caller is not authorized to read, scope every query to the caller's own objects, and store credentials so a read leak is not directly replayable (and rotate exposed secrets). The distinguishing test: as a low-privilege user, craft a filter/query that references another account's password hash or token, and confirm the API refuses it - a platform whose filter/serializer leaks sensitive fields lets an attacker chain disclosure into account impersonation and privilege escalation.",
4903
+ "evidence": "https://github.com/advisories/GHSA-6hjj-gq77-j4qw",
4904
+ "gap_closes": [
4905
+ "NIST-800-53-AC-3",
4906
+ "NIST-800-53-SC-28",
4907
+ "ALL-AI-PIPELINE-INTEGRITY"
4908
+ ]
4909
+ }
4910
+ ],
4911
+ "_auto_imported": false,
4912
+ "_intake_method": "manual-verified-curation"
4913
+ },
4914
+ "CVE-2026-41950": {
4915
+ "name": "Dify Chat-Messages Arbitrary File-UUID Cross-User File Read",
4916
+ "lesson_date": "2026-05-26",
4917
+ "attack_vector": {
4918
+ "description": "Dify accepts a caller-supplied file UUID in a chat-messages request without verifying ownership, so an authenticated user reads files uploaded by other users in the same tenant (IDOR).",
4919
+ "privileges_required": "low (an authenticated tenant user)",
4920
+ "complexity": "low",
4921
+ "ai_factor": "The abused surface is Dify, a low-code LLM application-development platform. The lesson: an LLM app platform's API must enforce object-level authorization (ownership of the tenant/application/file referenced by a caller-supplied key) on every request - here a user-controlled key bypassed it for cross-user file disclosure."
4922
+ },
4923
+ "framework_coverage": {
4924
+ "NIST-800-53-AC-3": {
4925
+ "covered": true,
4926
+ "adequate": false,
4927
+ "gap": "Access enforcement does not verify ownership of the object referenced by a caller-supplied key (CWE-639)."
4928
+ },
4929
+ "NIST-800-53-SC-28": {
4930
+ "covered": true,
4931
+ "adequate": false,
4932
+ "gap": "Data is reachable cross-tenant/cross-user via a user-controlled key without an ownership check."
4933
+ },
4934
+ "ALL-AI-PIPELINE-INTEGRITY": {
4935
+ "covered": false,
4936
+ "adequate": false,
4937
+ "gap": "No framework treats an LLM app platform's object-level authorization as an integrity control whose absence yields cross-tenant/user access."
4938
+ }
4939
+ },
4940
+ "compliance_exposure_score": {
4941
+ "percent_audit_passing_orgs_still_exposed": 80,
4942
+ "basis": "Multi-tenant LLM app platforms expose rich object-referencing APIs; ownership checks on user-controlled keys (tenant/app/file ids) are frequently missing and rarely audited.",
4943
+ "theater_pattern": "ai_app_broken_object_authorization"
4944
+ },
4945
+ "ai_discovered_zeroday": false,
4946
+ "ai_discovery_source": "human_researcher",
4947
+ "ai_assist_factor": "none",
4948
+ "new_control_requirements": [
4949
+ {
4950
+ "id": "NEW-CTRL-106",
4951
+ "name": "AI-APP-API-OBJECT-AUTHORIZATION-AND-FIELD-EXPOSURE",
4952
+ "description": "An AI data-platform API (data-labeling, annotation, dataset/registry services) must enforce object-level authorization on every read and must never expose sensitive fields - secrets, session-signing keys, auth tokens, password hashes - through API responses, serializers, or user-controlled query/filter expressions. Use serializer field allowlists (never blanket model serialization), reject ORM/filter inputs that reference fields the caller is not authorized to read, scope every query to the caller's own objects, and store credentials so a read leak is not directly replayable (and rotate exposed secrets). The distinguishing test: as a low-privilege user, craft a filter/query that references another account's password hash or token, and confirm the API refuses it - a platform whose filter/serializer leaks sensitive fields lets an attacker chain disclosure into account impersonation and privilege escalation.",
4953
+ "evidence": "https://github.com/advisories/GHSA-6hjj-gq77-j4qw",
4954
+ "gap_closes": [
4955
+ "NIST-800-53-AC-3",
4956
+ "NIST-800-53-SC-28",
4957
+ "ALL-AI-PIPELINE-INTEGRITY"
4958
+ ]
4959
+ }
4960
+ ],
4961
+ "_auto_imported": false,
4962
+ "_intake_method": "manual-verified-curation"
4963
+ },
4964
+ "CVE-2024-12776": {
4965
+ "name": "Dify Unverified Password-Reset Endpoint Account Takeover",
4966
+ "lesson_date": "2026-05-26",
4967
+ "attack_vector": {
4968
+ "description": "Dify's /forgot-password/resets endpoint does not verify the reset code before allowing a password reset, so an attacker resets any user's password (including admin) without a valid code.",
4969
+ "privileges_required": "none (unauthenticated reset of any account)",
4970
+ "complexity": "high",
4971
+ "ai_factor": "The abused surface is Dify, a low-code LLM application-development platform. The lesson: an AI app's password-recovery flow is an authentication-integrity control - the unverified-reset-endpoint half of a takeover chain that ends in full admin control; reset tokens must be CSPRNG-generated AND verified server-side."
4972
+ },
4973
+ "framework_coverage": {
4974
+ "NIST-800-53-IA-2": {
4975
+ "covered": true,
4976
+ "adequate": false,
4977
+ "gap": "The LLM app's password-recovery flow lets an attacker authenticate as any user, including admin."
4978
+ },
4979
+ "NIST-800-53-AC-3": {
4980
+ "covered": true,
4981
+ "adequate": false,
4982
+ "gap": "An unverified reset endpoint grants control of any account."
4983
+ },
4984
+ "ALL-AI-PIPELINE-INTEGRITY": {
4985
+ "covered": false,
4986
+ "adequate": false,
4987
+ "gap": "No framework treats an LLM app platform's password-recovery flow as an authentication-integrity control whose failure yields full account takeover."
4988
+ }
4989
+ },
4990
+ "compliance_exposure_score": {
4991
+ "percent_audit_passing_orgs_still_exposed": 82,
4992
+ "basis": "LLM app platforms ship self-service password recovery; reset-token generation and verification are rarely audited, and weak PRNG / missing verification persist.",
4993
+ "theater_pattern": "ai_app_weak_password_recovery"
4994
+ },
4995
+ "ai_discovered_zeroday": false,
4996
+ "ai_discovery_source": "human_researcher",
4997
+ "ai_assist_factor": "none",
4998
+ "new_control_requirements": [
4999
+ {
5000
+ "id": "NEW-CTRL-108",
5001
+ "name": "AI-APP-PASSWORD-RECOVERY-INTEGRITY",
5002
+ "description": "An AI application's password-reset / account-recovery flow must (1) generate reset tokens with a cryptographically secure RNG (e.g. secrets / os.urandom - never random.randint or another predictable PRNG), making them long, single-use, and short-lived; and (2) verify the reset token server-side, bound to the requesting account, before accepting a new password - the reset endpoint must never perform a reset without a valid, matching, unexpired token. Rate-limit reset attempts. The distinguishing test: on a staging instance, request a reset and confirm the code is unpredictable across requests, and confirm POSTing to the reset endpoint with a wrong/absent code is rejected - an AI app whose recovery flow uses a weak PRNG or skips token verification permits takeover of any account, including administrators.",
5003
+ "evidence": "https://github.com/advisories/GHSA-g394-qpx6-x7rr",
5004
+ "gap_closes": [
5005
+ "NIST-800-53-IA-2",
5006
+ "NIST-800-53-AC-3",
5007
+ "ALL-AI-PIPELINE-INTEGRITY"
5008
+ ]
5009
+ }
5010
+ ],
5011
+ "_auto_imported": false,
5012
+ "_intake_method": "manual-verified-curation"
5013
+ },
4814
5014
  "CVE-2025-56520": {
4815
5015
  "name": "Dify Remote File Upload Server-Side Request Forgery",
4816
5016
  "lesson_date": "2026-05-26",