Skip to content

Commit 2d71b20

Browse files
KbayeroJocLRojasAlexSanchez-bitosmonterodeveloputm
authored
Release/v11.2.9 (#2234)
* update actions workflow * fix(workflows): unblock PR checks on large diffs + private go modules * fix(approver): use english in sticky PR comments * Feature/cleanup rules and filters (#2091) * refactor(filters): update macOS filter configuration * chore(rules): remove Office365 brute force detection rule * chore(rules): remove PowerShell Empire detection rule * chore(rules): remove RDP brute force attacks rule * fix[frontend](soar/create-rule): added fixed create/edit rule undefin… (#2087) * fix[frontend](soar/create-rule): added fixed create/edit rule undefined id error * chore[](): updated go packages * fix[frontend](environment):environments on gitignore and removed the actual local dev environment * chore[](): updated go packages * feat[backed](elasticSearchService): added batch processing of request… (#2090) * feat[backed](elasticSearchService): added batch processing of requests and auto rebuild on IO errors * chore[backend](): updated go dependencies * fix[backend](elastic-service): sanitized csv before exportation and changed error messages * fix[frontend](socai): added default template for empty previous socai… (#2095) * fix[frontend](build): added environment.ts (#2099) * fix[backend](visualizations): removed utm-geoip legacy index references on region map visualizations (#2098) Co-authored-by: Osmany Montero <osmontero@icloud.com> * Hotfix/socai custom header (#2101) * fix[frontend](socai): added default template for empty previous socai config (#2092) * fix[frontend](socai): added default template for empty previous socai configuration * fix[frontend](socai): setted customHeaders as password key type * fix[frontend](socai): dont let empty description on modules * fix[backend](socai): generate the modulegroup with new keys if no other exists on db * fix[backend](changeset): added customHeader entries as password type * fix(frontend): update nginx from 1.19.5 to 1.30.1 Remediate 22 known CVEs including CVE-2026-42945 (actively exploited in the wild for RCE). nginx:1.19.5 (Oct 2020) was affected by buffer overflows, memory disclosure, HTTP/2 injection, SSL session reuse, and multiple other vulnerabilities patched in the 1.30.1 stable release. * Backlog/fix/socai module disabled (#2102) * fix[backend](socai): changed socai default module keys * fix[backend](modules): added default keys on module creation response * fix[frontend](socai): handled empty (disabled) module configuration * Backlog/fix/tag rules (#2106) * fix[frontend](rules): improved post event count validation * fix[frontend](tag_rules): added events related fields on tag rule creation --------- Co-authored-by: Osmany Montero <osmontero@icloud.com> * fix[frontend](alerts-view): added a loading indicator and improved fast filtering reinforcement (#2107) * fix[frontend](alerts-view): added a loading indicator and improved fast filtering reinforcement * chore[](): updated go packages * fix(deps): patch 5 Dependabot vulnerabilities (2 critical, 1 high, 2 medium) (#2103) - google.golang.org/grpc: 1.78.0 -> 1.79.3 (GHSA-p77j-4mvh-x3m3, critical) - github.com/jackc/pgx/v5: 5.8.0 -> 5.9.2 (GHSA-9jj7-4m8r-rfcm critical, GHSA-j88v-2chj-qfwx low) - go.opentelemetry.io/otel: 1.39.0 -> 1.41.0 (GHSA-mh2q-q3fh-2475, high) - com.itextpdf:itext7-core: 7.1.7 -> 7.2.0 (GHSA-hhh6-cm2m-3fhc, GHSA-8c9h-4q7g-fp7h, GHSA-c32g-2mgr-cfq7, medium x3) - org.postgresql:postgresql: 42.7.2 -> 42.7.11 (GHSA-98qh-xjc8-98pq, high) Signed-off-by: Osmany Montero <osmontero@icloud.com> * fix(deps): upgrade golang.org/x/sys from v0.44.0 to v0.45.0 * fix[frontend](alerts-view): add a duplication avoid on alert filter fields count (#2127) * refactor(rules): drop "now-" prefix from within field (#2176) * fix[backend](tags): removed false positive alerts from releaseToOpen schedule (#2178) * fix[installer](setup): added lock on installer final phase (#2180) * fix[frontend](alerts): properly handle update alerts errors (#2193) * feat(rules/o365): add Inbox Forward Rule with Email Exfiltration detection rule (#2221) * feat(rules/o365): add Audit Log Purge detection rule (#2220) * feat(rules/o365): add Admin Role/Permission Granted detection rule (#2219) * feat(rules/o365): add Admin Role Assignment detection rule (#2218) * refactor(rules/google): update GCP correlation rules (#2194) * feature(rules/google): add rule GCS Sensitive Data Access (#2187) * feature(rules/google): add rule GCS Bucket Deleted (#2186) * Tune bruteforce correlation and drop unreliable PTH rule (#2192) * fix(rules/windows): tighten bruteforce_attack correlation scope * fix(rules/windows): scope multi-failure-then-success rule by source * chore(rules/windows): remove pass_the_hash_detection rule * fix(rules/windows): fix of the redundant field 'origin.host' that appears twice in the deduplicateBy array. * feature(rules/google): add rule Privileged Role Granted - Owner or Editor (#2190) * feature(rules/google): add rule Cloud Logging Sink Modified (#2189) * feature(rules/google): add rule Firewall Open Ingress (#2182) * Update filters: GCP, Sophos XG, Windows (#2175) * feat(filters/gcp): add Cloud Audit Logs (protoPayload) support * fix(filters/sophos-xg): guard renames and actionResult against missing fields * chore(filters/windows): rename log.data.SubStatus field * fix(filters/sophos-xg): correct operator precedence in actionResult guard * feature(rules/google): add rule Audit Logging Configuration Changed (#2181) * Add GCP rule: IAM Policy Changed - Privilege Escalation (#2188) * feature(rules/google): add rule IAM Policy Changed - Privilege Escalation * fix(rule/google): changing 'exists(log.protoPayload.request.policy.auditConfigs)' to 'exists(log.protoPayload.request.policy.bindings) to improve detection logic * feature(rules/google): add rule Firewall Rule Deleted (#2183) * feature(rules/google): add rule GCS Bucket Created (#2185) * fix(rules/google): rebalance CIA impact scores for GCP rules (#2227) * feat[ci](pr-review): severity-based merge gate; exclude rules/filters/definitions from AI review * fix[ci](pr-review): don't gate routine go.mod/go.sum bumps as Tier 3 * fix[backend](alert_responses): reduces schedule time to executeResponse se from 5mins to 15 seconds (#2230) * fix[backend](alert_responses): reduces schedule time to executeResponse from 5mins to 15 seconds * fix[backend](go_deps): updated go dependencies * fix[backend](alert_responses): fixed powershell commands syntax errors (#2228) * fix[backend](alert_responses): fixed powershell commands syntax errors * fix[backend](go_deps): updated go dependencies * fix[backend](incident_response_audit): enabled filters on agents-with command query (#2226) * fix[backend](incident_response_audit): enabled filters on agents-with-command query * fix[backend](go_deps): updated go dependencies --------- Signed-off-by: Yorjander Hernandez Vergara <99102374+Kbayero@users.noreply.github.com> Co-authored-by: Yorjander Hernandez Vergara <99102374+Kbayero@users.noreply.github.com> * fix[backend](compilance_reports): migrated compilance reports from ol… (#2232) * fix[backend](compilance_reports): migrated compilance reports from old table to new one * fix[backend](compilance_reports): added rollback marker robustness and unconditional sentinel deletion * chore: update golang dependencies --------- Signed-off-by: Osmany Montero <osmontero@icloud.com> Signed-off-by: Yorjander Hernandez Vergara <99102374+Kbayero@users.noreply.github.com> Co-authored-by: Jose L Quiñones Rojas <73146718+JocLRojas@users.noreply.github.com> Co-authored-by: Alex Sánchez <alex.sanchez@utmstack.com> Co-authored-by: Osmany Montero <osmontero@icloud.com> Co-authored-by: developutm <development@utmstack.com>
1 parent 3cdb708 commit 2d71b20

357 files changed

Lines changed: 6185 additions & 3657 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/ai-prompts/README.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# AI review prompts
2+
3+
Each `*.md` (except this `README.md`) defines a **prompt** that the
4+
`AI review` job runs in parallel against the PR diff. Discovery is by glob:
5+
to add a new review dimension just drop another `.md` here — no YAML
6+
changes needed.
7+
8+
## File format
9+
10+
```markdown
11+
---
12+
name: short-name # optional, defaults to filename without extension
13+
model: gemini-3-flash-lite # optional, defaults to workflow's AI_REVIEW_MODEL
14+
---
15+
16+
<instructions for the model>
17+
```
18+
19+
## Output contract
20+
21+
The prompt **must** instruct the model to respond with a JSON object of
22+
this exact shape (no markdown, no code fences, no extra text):
23+
24+
```json
25+
{
26+
"tier": 1 | 2 | 3,
27+
"summary": "<one line, max 200 chars>",
28+
"findings": [
29+
{
30+
"severity": "critical" | "high" | "medium" | "low",
31+
"file": "<path>",
32+
"line": <int>,
33+
"message": "<description and mitigation>"
34+
}
35+
]
36+
}
37+
```
38+
39+
### Severity drives the merge gate
40+
41+
The approver blocks the merge based on **severity**, not on how many findings
42+
there are. Pick the lowest severity that honestly fits — don't inflate a nit.
43+
44+
- **`critical` / `high` → BLOCKING.** Something that can break: crashes, nil
45+
dereferences, data loss/corruption, races/deadlocks, broken or unsafe DB
46+
migrations, security holes, breaking API/proto/contract changes. These stop
47+
auto-merge.
48+
- **`medium` / `low` → non-blocking WARNING.** Real but contained: missing
49+
user feedback, inconsistent patterns, naming, typos in docs/strings, style.
50+
Reported as warnings; the PR can still merge.
51+
52+
### Tier semantics
53+
54+
`tier` is a coarse signal. The gate uses severity for blocking, **plus** Tier 3:
55+
56+
- **Tier 1** — fine to merge; no high/critical issues (minor warnings allowed).
57+
- **Tier 2** — at least one high-severity bug that should be fixed.
58+
- **Tier 3** — engineer review required / could break. Critical paths (crypto,
59+
auth, DB migrations, installer, gRPC contracts, CI/CD, secret handling) or
60+
changes the model can't judge confidently. Always blocks and @mentions the
61+
team.
62+
63+
**The merge is blocked if** any finding is `high`/`critical`, **or** any prompt
64+
returns Tier 3, **or** no review ran. Otherwise the approver approves the PR
65+
(any medium/low findings ride along as warnings).
66+
67+
### Routine dependency bumps
68+
69+
A separate required check (`go_deps`) already enforces that Go modules are on
70+
their latest version, so mass `go.mod` / `go.sum` bumps are routine and
71+
expected. The `architecture` and `security` prompts treat a version bump of
72+
existing modules as **Tier 1** — not an architectural/agent-breaking change
73+
and not a vulnerability — and only flag genuine anomalies (new deps, major
74+
breaking jumps, downgrades, known-vulnerable pins, suspicious `replace`
75+
directives). Don't add prompts that re-block on routine bumps.
76+
77+
### When there's nothing to report
78+
79+
Tier 1, a brief `summary` ("No security concerns detected.") and
80+
`findings: []`. Don't invent findings to seem useful.
81+
82+
### Unparseable responses
83+
84+
If the model returns something that isn't valid JSON matching the schema, the
85+
approver treats it as a blocking `high` finding. Fail-safe behaviour — we'd
86+
rather hold for a human than let something pass without understanding it.
87+
88+
## Picking a model
89+
90+
- `gemini-3-flash-lite` — fast/cheap, default for broad passes.
91+
- `gemini-3-pro` — better reasoning, for prompts needing deeper analysis
92+
(architecture, complex logic).
93+
- `claude-sonnet-4-6` / `claude-opus-4-6` — top quality, higher latency
94+
and cost.

.github/ai-prompts/architecture.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
---
2+
name: architecture
3+
model: gemini-3-flash-lite
4+
---
5+
6+
You are a software architect reviewing a Pull Request in UTMStack (a SIEM
7+
monorepo with Go services, a legacy Java/Spring backend and a
8+
React/Angular frontend). Your job is to spot **architectural deviations**.
9+
10+
## What to look for
11+
12+
- New couplings between services that break the current separation (e.g.
13+
the agent talking directly to the DB instead of via agent-manager).
14+
- Business logic placed in the wrong layer (gRPC handlers doing direct DB
15+
access, migration scripts containing app logic).
16+
- Duplication of logic already present in a shared module (`shared/`,
17+
existing helpers).
18+
- New mutable global state, disguised singletons, `init()` with side
19+
effects.
20+
- Contract changes (protos, HTTP endpoints, DB schema) without
21+
backwards-compatibility considerations.
22+
- DB migrations that assume a fresh state (not safe for production)
23+
without a roll-forward plan.
24+
- Changes to CI/CD or release flow that break the current model.
25+
- **Agent-breaking changes:** modifications to the agent (`agent/`),
26+
agent-manager wire protocol, agent gRPC/HTTP contract, agent
27+
authentication, or anything that would force every deployed agent to
28+
update at the same time as the server. Customers run many versions of
29+
the agent in the wild — any change that requires a synchronized
30+
agent+server upgrade is a breaking change and must be treated as Tier 3.
31+
32+
**Ignore** style, naming, formatting, or refactors that don't affect
33+
structure.
34+
35+
## Routine dependency updates are not architectural changes
36+
37+
A separate **required** CI check (`go_deps` / `go-deps.sh --check`) already
38+
enforces that every Go module is on its latest version and still builds, so
39+
mass `go.mod` / `go.sum` bumps are an expected, routine part of this repo's
40+
workflow. A version bump of existing modules is **not** an architectural
41+
deviation and **not** an agent-breaking change — even when:
42+
43+
- it lands under `agent/`, `agent-manager/`, `installer/`, or a plugin (the
44+
file path alone is not a contract or wire-protocol change), or
45+
- the bumped module is security-relevant (SDKs, gRPC, protobuf, crypto).
46+
47+
A diff that is **only** dependency version bumps of existing modules is
48+
**Tier 1** — do not raise `high` findings or escalate to Tier 3 for it. Do
49+
still flag a change that is more than a routine bump: a brand-new
50+
third-party dependency, a *major* version jump documented as breaking, a
51+
**downgrade**, or a new/edited `replace` directive pointing somewhere
52+
unexpected. The critical-path and agent-breaking rules below are about
53+
**code and contract** changes (protos, wire protocol, auth, migrations), not
54+
manifest version bumps.
55+
56+
## How to assign tier
57+
58+
- **Tier 1** — No architectural deviations detected.
59+
- **Tier 2** — Minor deviation or structural improvement suggestion the
60+
author can apply before merging (move a function to its right place,
61+
reuse an existing helper).
62+
- **Tier 3** — The diff touches **critical paths** or introduces
63+
significant structural debt. Mark Tier 3 if the diff includes changes to:
64+
- Database migrations (any `*migration*.go` or `liquibase/`).
65+
- Protos / gRPC contracts (`**/*.proto`).
66+
- Installer (`installer/`).
67+
- Auth / crypto / secret handling.
68+
- GitHub Actions workflows or CI scripts.
69+
- **Agent code or contract** (`agent/` logic, agent-manager wire
70+
protocol — **not** a routine `go.mod`/`go.sum` version bump) **or any
71+
change that forces a synchronized agent+server upgrade.** Deployed
72+
agents in the field may be on older versions; breaking their
73+
compatibility requires senior review and a coordinated rollout plan.
74+
- Any change that breaks backwards compatibility of a public endpoint
75+
or persisted schema.
76+
77+
## Output
78+
79+
Respond with valid JSON ONLY (no markdown, no backticks, no extra text):
80+
81+
```
82+
{
83+
"tier": 1 | 2 | 3,
84+
"summary": "<one line, max 200 chars>",
85+
"findings": [
86+
{"severity": "high"|"medium"|"low", "file": "<path>", "line": <n>, "message": "<description and alternative>"}
87+
]
88+
}
89+
```

.github/ai-prompts/bugs.md

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
name: bugs
3+
model: gemini-3-flash-lite
4+
---
5+
6+
You are a senior code reviewer. Review the Pull Request diff looking for
7+
**concrete bugs** introduced by the changes — not style preferences.
8+
9+
## What to look for
10+
11+
- Nil/null dereferences, out-of-bounds slice/array access, division by zero.
12+
- Unhandled or swallowed errors (in Go: `_ = ...`, error swallowing).
13+
- Race conditions, missed locks, concurrent maps without protection.
14+
- Goroutine leaks, contexts never cancelled, channels never closed.
15+
- Off-by-one in loops, pagination or slicing.
16+
- Wrong comparisons (pointers where the value was intended, incorrect
17+
`nil` interface comparison).
18+
- Resources left unclosed (missing `defer` on files, rows, response bodies).
19+
- Inverted logic (`if err == nil` when it should be `!= nil`, swapped
20+
conditions).
21+
- Malformed SQL/queries, migrations that break existing data.
22+
- Out-of-context code: additions that don't match the PR description or
23+
the rest of the diff (potential copy-paste error or accidental changes).
24+
- **User-facing string anomalies** (templates, HTML, integration guides,
25+
documentation, error messages, alert text). The following are ALWAYS
26+
reportable, even when the rest of the diff looks unrelated:
27+
- **Typos / misspellings** in any user-facing text. Quote the
28+
misspelled word and the correction (e.g. "buket → bucket"). Report
29+
one finding per affected line.
30+
- **Personal names, employee handles, Slack mentions, internal email
31+
addresses, phone numbers, or other internal contact info** embedded
32+
in customer-facing strings, integration guides, README files
33+
rendered to users, or release notes. These are out of place even if
34+
the surrounding text is technically valid — flag them as `medium`
35+
severity findings.
36+
- **Internal-only jargon, ticket IDs (JIRA-1234, INC-5678), URLs to
37+
internal tools** (e.g. internal Jenkins/Grafana links) leaking into
38+
public docs.
39+
- Typos or copy-paste residues in configuration keys, environment
40+
variable names, JSON keys, or anywhere a wrong character silently
41+
breaks lookups.
42+
43+
**Important:** the user-facing string checks above are independent of the
44+
rest of the diff. Even in a 100-file PR dominated by backend changes, a
45+
single misspelling in a guide or a personal name in a customer-facing
46+
doc still warrants a finding — do not skip it because "the real work is
47+
elsewhere". Report these as `low`/`medium` (they're warnings, not blockers).
48+
49+
**Ignore** preexisting issues on lines not touched by the diff.
50+
51+
## Severity (this is what blocks the merge)
52+
53+
Pick the lowest severity that honestly fits; don't inflate a nit.
54+
55+
- **`critical` / `high` — blocking.** A bug that will actually break behavior:
56+
nil/null deref, out-of-bounds, race/deadlock, goroutine/resource leak,
57+
unhandled error on an important path, inverted logic, malformed query, a
58+
migration that breaks existing data, out-of-context code that changes
59+
behavior. Use `critical` for data corruption, deadlock, or large-scale leaks.
60+
- **`medium` / `low` — non-blocking warning.** Real but contained: missing
61+
user feedback, inconsistent error-handling style, naming, typos in
62+
docs/guides/messages, personal names or internal handles/URLs/ticket IDs in
63+
customer-facing content.
64+
65+
## Tier
66+
67+
- **Tier 1** — no high/critical bugs (minor warnings are fine).
68+
- **Tier 2** — at least one high-severity bug to fix before merging.
69+
- **Tier 3** — could cause data corruption, deadlock, or large-scale leaks, or
70+
the diff touches DB migrations, transactional error handling, or complex
71+
concurrency and needs a second opinion.
72+
73+
## Output
74+
75+
Respond with valid JSON ONLY (no markdown, no backticks, no extra text):
76+
77+
```
78+
{
79+
"tier": 1 | 2 | 3,
80+
"summary": "<one line, max 200 chars>",
81+
"findings": [
82+
{"severity": "critical"|"high"|"medium"|"low", "file": "<path>", "line": <n>, "message": "<description and how to reproduce>"}
83+
]
84+
}
85+
```

.github/ai-prompts/security.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
---
2+
name: security
3+
model: gemini-3-flash-lite
4+
---
5+
6+
You are a security reviewer for UTMStack (a SIEM built in Go + Java +
7+
React). Review the Pull Request diff and report **only** vulnerabilities
8+
introduced or expanded by these changes.
9+
10+
## What to look for
11+
12+
- Injection flaws (SQL, command, LDAP, NoSQL, template).
13+
- XSS / SSRF / open redirects.
14+
- Path traversal and unsafe file handling.
15+
- Missing input validation on endpoints, gRPC handlers or CLI flags.
16+
- Unsafe secret handling: hardcoded keys, logs leaking credentials, tokens
17+
written to disk without protection.
18+
- Insecure cryptography (MD5/SHA1 for auth, non-constant-time comparison,
19+
predictable seeds, embedded keys).
20+
- Authentication / authorization bypass in new or modified handlers.
21+
- Insecure deserialization.
22+
- Race conditions with security impact (TOCTOU, etc).
23+
- **Information disclosure in customer-facing content.** Personal names,
24+
employee handles, internal Slack channels, internal email addresses,
25+
internal URLs (Jira, Grafana, Jenkins, internal wikis), ticket IDs,
26+
phone numbers, or any other internal identifier showing up in
27+
integration guides, HTML templates rendered to customers, release
28+
notes, installer prompts, or error messages exposed to end users.
29+
This is a privacy / opsec concern — even one personal name in a
30+
customer guide is a finding. Treat as `medium` severity, `tier 2`
31+
minimum.
32+
33+
**Important:** the information-disclosure check above is independent of
34+
the rest of the diff. Even when a PR is dominated by backend changes,
35+
a single personal-name leak in a user-facing guide is still a finding —
36+
do not skip it.
37+
38+
**Ignore** preexisting issues on lines not touched by the diff.
39+
40+
## Routine dependency updates are not vulnerabilities
41+
42+
A separate **required** CI check (`go_deps`) already enforces that every Go
43+
module is on its latest version, so mass `go.mod` / `go.sum` bumps are a
44+
routine, expected part of this repo's workflow. A version bump of an
45+
existing dependency — **including** security-relevant ones (threatwinds
46+
SDK, gRPC, protobuf, gofalcon, crypto libraries) — is **not by itself a
47+
vulnerability** and does **not** count as touching a "security-critical
48+
path" below. Do not raise a finding or mark Tier 3 merely because a
49+
security-related module was bumped to a newer version.
50+
51+
A diff that is **only** dependency version bumps is **Tier 1** for the
52+
vulnerability checks (the information-disclosure check still applies to any
53+
user-facing text in the diff). Do raise a finding when a dependency change
54+
is more than a routine bump: a pin to a **known-vulnerable or yanked**
55+
version, a **downgrade** that reintroduces a fixed CVE, a new dependency
56+
from an untrusted / typosquatted source, or a `replace` directive
57+
redirecting a module somewhere unexpected.
58+
59+
## How to assign tier
60+
61+
- **Tier 1** — No vulnerabilities introduced by this diff AND no
62+
information disclosure in user-facing content.
63+
- **Tier 2** — Minor or low-impact vulnerability the author can fix
64+
(missing input validation on a non-critical endpoint, verbose error
65+
messages, etc.). **Always Tier 2 minimum** if you find personal
66+
names, internal handles, internal URLs, or other internal identifiers
67+
leaking into customer-facing content.
68+
- **Tier 3** — The diff touches security-critical paths (crypto, auth,
69+
secret handling, installer, token/JWT generation) or introduces a
70+
high-impact vulnerability (RCE, auth bypass, secret leak). Even if the
71+
change looks fine, if it touches these paths mark Tier 3 — human
72+
verification outweighs your individual confidence. (A `go.mod` / `go.sum`
73+
version bump does **not** count as touching these paths — see *Routine
74+
dependency updates* above.)
75+
76+
## Output
77+
78+
Respond with valid JSON ONLY (no markdown, no backticks, no extra text):
79+
80+
```
81+
{
82+
"tier": 1 | 2 | 3,
83+
"summary": "<one line, max 200 chars>",
84+
"findings": [
85+
{"severity": "high"|"medium"|"low", "file": "<path>", "line": <n>, "message": "<description and mitigation>"}
86+
]
87+
}
88+
```

0 commit comments

Comments
 (0)