Bump immutable from 5.1.5 to 5.1.9 - #532
Quality Monitor
🚀 Integration Tests (Whole Project): ✅ successful — 10 passed
⛔ Architecture Tests (Whole Project): ✅ successful — 15 passed
〰️ Line Coverage (Changed Code): 100.00% — perfect 🎉
➰ Branch Coverage (Changed Code): 100.00% — perfect 🎉
〰️ Line Coverage (Whole Project): 84.21%
➰ Branch Coverage (Whole Project): 100.00%
CheckStyle (Whole Project): No warnings
PMD (Whole Project): No warnings
☕ Java Compiler (Whole Project): No warnings
SpotBugs (Whole Project): No bugs
🐛 Error Prone (Whole Project): No bugs
🚫 Revapi (Whole Project): No warnings
🛡️ OWASP Dependency Check (Whole Project): 227 vulnerabilities
🌀 Cyclomatic Complexity (Whole Project): 8 (total)
💭 Cognitive Complexity (Whole Project): 0 (total)
➿ N-Path Complexity (Whole Project): 8 (total)
📏 Lines of Code (Whole Project): 104 (total)
📝 Non Commenting Source Statements (Whole Project): 25 (total)
🔗 Class Cohesion (Whole Project): 6.67% (maximum)
⚖️ Weight of Class (Whole Project): 20.00% (maximum)
🚦 Quality Gates
Overall Status: ✅ SUCCESS
✅ Passed Gates
- ✅ Overall Tests Success Rate: 100.00 >= 100.00
- ✅ Potential Bugs in Whole Project: 0.00 <= 0.00
- ✅ Style Violation in Whole Project: 0.00 <= 0.00
Created by Quality Monitor v4.15.0 (#82d77af)
Details
☀️ Quality Monitor
Tests
| Icon | Name | Scope | Passed | Skipped | Failed | Status |
|---|---|---|---|---|---|---|
| 🚀 | Integration Tests | Whole Project | 10 |
0 |
0 |
✅ |
| ⛔ | Architecture Tests | Whole Project | 15 |
0 |
0 |
✅ |
| Total | - | - | 25 |
0 |
0 |
✅ |
⚠️ Style
| Icon | Name | Scope | Warnings | Status |
|---|---|---|---|---|
| CheckStyle | Whole Project | 0 |
✅ | |
| PMD | Whole Project | 0 |
✅ | |
| ☕ | Java Compiler | Whole Project | 0 |
✅ |
| ➕ | Total | - | 0 |
✅ |
🐛 Bugs
| Icon | Name | Scope | Warnings | Status |
|---|---|---|---|---|
| SpotBugs | Whole Project | 0 |
✅ | |
| 🐛 | Error Prone | Whole Project | 0 |
✅ |
| ➕ | Total | - | 0 |
✅ |
🚫 API Problems
| Icon | Name | Scope | Warnings | Status |
|---|---|---|---|---|
| 🚫 | Revapi | Whole Project | 0 |
✅ |
🛡️ Vulnerabilities
| Icon | Name | Scope | Warnings | Status |
|---|---|---|---|---|
| 🛡️ | OWASP Dependency Check | Whole Project | 227 |
👣 Coverage for New Code
| Icon | Name | Scope | Covered % | Status |
|---|---|---|---|---|
| 〰️ | Line Coverage | Changed Code | 100.00 | 🎉 |
| ➰ | Branch Coverage | Changed Code | 100.00 | 🎉 |
| ➕ | Total | - | 100.00 | 🎉 |
👣 Coverage for Whole Project
| Icon | Name | Scope | Covered % | Status |
|---|---|---|---|---|
| 〰️ | Line Coverage | Whole Project | 84.21 |
🌤️ |
| ➰ | Branch Coverage | Whole Project | 100.00 |
🎉 |
| ➕ | Total | - | 92.10 |
☀️ |
📐 Software Metrics
| Icon | Name | Scope | Total | Min | Max | Mean | Median |
|---|---|---|---|---|---|---|---|
| 🌀 | Cyclomatic Complexity | Whole Project | 8 | 1 | 1 | 1.00 | 1 |
| 💭 | Cognitive Complexity | Whole Project | 0 | 0 | 0 | 0.00 | 0 |
| ➿ | N-Path Complexity | Whole Project | 8 | 1 | 1 | 1.00 | 1 |
| 📏 | Lines of Code | Whole Project | 104 | 9 | 95 | 52.00 | 9 |
| 📝 | Non Commenting Source Statements | Whole Project | 25 | 1 | 24 | 12.50 | 1 |
| 🔗 | Class Cohesion | Whole Project | 6.67% | 0.00% | 6.67% | 3.33% | 0.00% |
| ⚖️ | Weight of Class | Whole Project | 20.00% | 0.00% | 20.00% | 10.00% | 0.00% |
📌 Reference Results
Delta reports computed against the reference results of 54e1e5e in workflow run 29724760152.
🚦 Quality Gates
Overall Status: ✅ SUCCESS
✅ Passed Gates
- ✅ Overall Tests Success Rate: 100.00 >= 100.00
- ✅ Potential Bugs in Whole Project: 0.00 <= 0.00
- ✅ Style Violation in Whole Project: 0.00 <= 0.00
Annotations
Check warning on line 1 in brace-expansion:2.0.2
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2026-33750
The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13, a brace pattern with a zero step value (e.g., `{1..2..0}`) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory. Versions 5.0.5, 3.0.2, 2.0.3, and 1.1.13 fix the issue. As a workaround, sanitize strings passed to `expand()` to ensure a step value of `0` is not used.
Check warning on line 1 in brace-expansion:2.0.2
github-actions / Quality Monitor
OWASP Dependency Check: GHSA-f886-m6hf-6m8v
### Impact
A brace pattern with a zero step value (e.g., `{1..2..0}`) causes the sequence generation loop to run indefinitely, making the process hang for seconds and allocate heaps of memory.
The loop in question:
https://github.com/juliangruber/brace-expansion/blob/daa71bcb4a30a2df9bcb7f7b8daaf2ab30e5794a/src/index.ts#L184
`test()` is one of
https://github.com/juliangruber/brace-expansion/blob/daa71bcb4a30a2df9bcb7f7b8daaf2ab30e5794a/src/index.ts#L107-L113
The increment is computed as `Math.abs(0) = 0`, so the loop variable never advances. On a test machine, the process hangs for about 3.5 seconds and allocates roughly 1.9 GB of memory before throwing a `RangeError`. Setting max to any value has no effect because the limit is only checked at the output combination step, not during sequence generation.
This affects any application that passes untrusted strings to expand(), or by error sets a step value of `0`. That includes tools built on minimatch/glob that resolve patterns from CLI arguments or config files. The input needed is just 10 bytes.
### Patches
Upgrade to versions
- 5.0.5+
A step increment of 0 is now sanitized to 1, which matches bash behavior.
### Workarounds
Sanitize strings passed to `expand()` to ensure a step value of `0` is not used.
Check warning on line 1 in brace-expansion:2.0.2
github-actions / Quality Monitor
OWASP Dependency Check: GHSA-3jxr-9vmj-r5cp
### Summary
brace-expansion's expand() exhibits exponential-time - O(2ⁿ) - behavior in the number of consecutive non-expanding {} groups. A short, all-ASCII input (~90 bytes/30 groups) blocks the calling thread for minutes; a slightly longer input hangs it effectively indefinitely. Because the dominant consumers run on Node's single-threaded event loop, one small input can fully stall a worker/process.
In `expand_`, `post` is computed unconditionally at the top of the function, before the early-return branches that don't use it:
```js
const post = m.post.length ? expand_(m.post, max, false) : ['']; // always recurses
...
if (!isSequence && !isOptions) {
if (m.post.match(/,(?!,).*\}/)) {
str = m.pre + '{' + m.body + escClose + m.post;
return expand_(str, max, true); // restart — `post` discarded
}
return [str];
}
```
For input like a{},{},…, the first {} is non-expanding, so control reaches the {a},b} rewrite branch - but `expand_` has already recursed into post over the entire remaining tail, only to throw the result away.
Each level therefore spawns two recursive expansions over essentially the same remaining work: `T(n) = 2·T(n−1) ⇒ O(2ⁿ)`.
The max option does not mitigate this: max only bounds the output-building loops; neither the post recursion nor the rewrite recursion consults it.
Measured on 5.0.6:
| groups (n) | input bytes | time |
|---|---|---|
| 20 | 60 | 130 ms |
| 24 | 72 | 1.9 s |
| 26 | 78 | 7.8 s |
| 30 (PoC) | 90 | ~2 min |
### Proof of concept
```js
const { expand } = require('brace-expansion');
// 30 non-expanding groups, ~90 bytes — blocks for minutes:
expand('a{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}');
```
### Impact
Any application that passes attacker-influenced strings to brace-expansion.expand() - directly or transitively via minimatch/glob brace patterns - can be driven into a multi-minute-to-indefinite CPU hang by a tiny request, denying service on that thread/process.
### Remediation
Upgrade to a patched release. The fix:
1. Defers computing post until after the early-return branches (and computes it locally in the $-suffix branch), so post is only expanded when a brace set actually expands and the value is used. This alone removes the exponential.
1. Converts the {a},b} rewrite from recursion to an in-function loop, so a long run of rewrites cannot grow the call stack.
Verified: the PoC drops from ~2 min to 0.55 ms, 5,000 groups complete in ~344 ms, and output is identical to 5.0.6 across a behavioral-equivalence suite (sequences, padding, $-prefix, a{},b}c, {},a}b, x{{a,b}}y, etc.). Post-fix complexity is ~O(n²) on this input class - acceptable for the security fix; a linear rewrite can be a non-urgent follow-up.
If immediate upgrade isn't possible, avoid passing untrusted input to expand() / glob brace patterns, or run such expansion under a timeout/worker.
Check warning on line 1 in commons-jelly-tags-fmt-1.1-jenkins-20250731.jar
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2018-1000052
fmtlib version prior to version 4.1.0 (before commit 0555cea5fc0bf890afe0071a558e44625a34ba85) contains a Memory corruption (SIGSEGV), CWE-134 vulnerability in fmt::print() library function that can result in Denial of Service. This attack appear to be exploitable via Specifying an invalid format specifier in the fmt::print() function results in a SIGSEGV (memory corruption, invalid write). This vulnerability appears to have been fixed in after commit 8cf30aa2be256eba07bb1cefb998c52326e846e7.
Check warning on line 1 in immutable:5.1.5
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2026-59879
Immutable.js provides many Persistent Immutable data structures. Prior to 4.3.9 and 5.1.8, List#set, List#setSize, List#setIn, List#updateIn, and the functional set, setIn, and updateIn mishandle an index or size in the range 2 ** 30 to 2 ** 31 in setListBounds in src/List.js, causing an empty List to enter an uncatchable infinite loop, a populated List to allocate without bound until process abort, or setSize to silently wrap large values. This issue is fixed in versions 4.3.9 and 5.1.8.
Check warning on line 1 in immutable:5.1.5
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2026-59880
Immutable.js provides many Persistent Immutable data structures. Prior to 4.3.9 and 5.1.8, Immutable.Map and Immutable.Set keep keys that share the same 32-bit hash in a HashCollisionNode collision bucket that is scanned linearly, allowing an attacker who controls keys inserted into a Map, such as through Immutable.Map(obj), Immutable.fromJS(obj), state.merge(userObject), or mergeDeep, to craft many colliding keys and degrade insertion and lookup to consume disproportionate CPU. This issue is fixed in versions 4.3.9 and 5.1.8.
Check warning on line 1 in immutable:5.1.5
github-actions / Quality Monitor
OWASP Dependency Check: GHSA-v56q-mh7h-f735
## Summary
`List#set`, `List#setSize`, `List#setIn`, `List#updateIn` (and the functional `set` / `setIn` / `updateIn`) mishandle an index or size in the range `[2 ** 30, 2 ** 31)`:
- On an **empty** `List` the operation enters an **uncatchable infinite loop** (a tight CPU spin; a surrounding `try/catch` never regains control). Only killing the worker recovers it.
- On a **populated** `List` (≥ 32 elements — i.e. any array of ≥ 32 items turned into a `List` by `fromJS`) the loop allocates without bound → heap exhaustion → the **process aborts** (`SIGABRT`, exit `134`, or kernel OOM-kill `137`). A real crash, not a recoverable error.
The index may be a **numeric string**, so it can come straight from a request body, URL, or key-path. A single small unauthenticated request is enough.
There is also a companion **silent data-corruption** issue in `setSize`:
```js
List([1, 2, 3]).setSize(2 ** 31); // before fix => size 0 (silently cleared)
List([1, 2, 3]).setSize(2 ** 32 + 5); // before fix => size 5 (huge value wraps to 5)
```
## Impact
Availability only. A reachable configuration is any endpoint that routes untrusted input into a `List` index or a `setIn`/`updateIn` key-path — which the extremely common `state = fromJS(body); state.setIn(userPath, value)` pattern does (config stores, document/collection editors, redux-immutable reducers, JSON-Patch endpoints, etc.).
No confidentiality or integrity impact, no RCE. The companion `setSize` bug can silently corrupt application state (wrong size) without crashing.
## Reproduction (immutable 5.1.7)
```ts
import { fromJS, List } from 'immutable';
// 1) Populated List: OOM -> process abort (SIGABRT, exit 134) within ~2s
fromJS({ items: new Array(64).fill(0) }).setIn(['items', '1073741824'], 'x');
// 2) Empty List: hangs forever, uncatchable
List().set(2 ** 30, 'x');
// 3) Silent truncation
List([1, 2, 3]).setSize(2 ** 31); // => size 0
List([1, 2, 3]).setSize(2 ** 32 + 5); // => size 5
```
A remote 43-byte HTTP request (`{"path":["items","1073741824"],"value":"x"}`) is sufficient to abort a worker that applies it via `state = state.setIn(path, value)`.
Any index in `[2 ** 30, 2 ** 31)` works (`1073741824`, `2000000000`, …). An index in `[2 ** 31, 2 ** 32)` does not crash — it silently wraps (clearing the List) via the same root cause.
## Root cause
`List` stores its values in a 32-wide trie (`SHIFT = 5`, so each level addresses 5 more bits) and uses **signed 32-bit bitwise arithmetic** throughout `setListBounds()` (`src/List.js`):
1. **Infinite loop (the hang / OOM).** The level-raising loop
```js
while (newTailOffset >= 1 << (newLevel + SHIFT)) {
newRoot = new VNode(
newRoot && newRoot.array.length ? [newRoot] : [],
owner
);
newLevel += SHIFT;
}
```
relies on `1 << (newLevel + SHIFT)`. A JavaScript shift count is taken **mod 32**, so once `newLevel + SHIFT` reaches `31` the term goes **negative** (`1 << 31 === -2147483648`) and at `32` wraps to `1` (`1 << 35 === 8`). The comparison then stays `true` forever and the loop never terminates. On a populated `List`, each iteration retains a new `VNode` (`[newRoot]`), so the heap fills and V8 aborts; on an empty `List` it spins on CPU without allocating.
2. **Silent wraparound (the `setSize` corruption).** The `begin |= 0` / `end |= 0` coercion (`ToInt32`) silently wraps large finite values (`(2 ** 31) | 0 === -2147483648`, `(2 ** 32 + 5) | 0 === 5`), producing a wrong resulting size instead of an error.
The threshold is `2 ** 30`: that is the largest size for which `1 << (newLevel + SHIFT)` stays a valid positive 32-bit integer throughout the loops (`newLevel + SHIFT` stays ≤ 30).
## Remediation
The fix is contained to `setListBounds()` in `src/List.js`:
1. **Validate up front, before the lossy `| 0` coercion.** Compute the intended origin and capacity in full precision and throw a clear, catchable `RangeError` when they exceed the addressable range (`MAX_LIST_SIZE = 2 ** 30`). `Infinity`/`NaN` are left to the existing `| 0 → 0` behaviour (so `setSize(Infinity)` stays `0` and `slice(0, Infinity)` still means "to the end").
2. **Stop the shift from wrapping.** Replace `1 << exp` in the level-raising loops with a helper that uses the cheap bitwise shift while it is exact (`exp ≤ 30`, the common path including every `push`/`setSize`/`slice`) and falls back to the non-wrapping `2 ** exp` only for the rare deep trees reached when a negative origin (`unshift` / negative index) is normalized to a large positive capacity (`exp` can reach 35 there, where `1 << 35` would wrap to 8).
This turns every hang, the misleading `"Maximum call stack size exceeded"`, the OOM/`SIGABRT`, and the silent `setSize` truncation into one descriptive `RangeError`, preserves all behaviour for sizes `< 2 ** 30`, and keeps the hot `push` path on the fast bitwise shift (the `2 ** exp` branch is never reached by non-negative operations).
### Is the new limit a breaking change?
No working code is affected. A `List` could never actually hold `≥ 2 ** 30` values before — the attempt hung, crashed, or silently corrupted the size. The limit was already implicit in the 32-bit trie; the fix only makes it explicit and catchable, mirroring native JS arrays (`new Array(2 ** 32)` → `RangeError: Invalid array length`). The single observable behaviour change is that `setSize(hugeValue)`, which used to return a silently wrong size, now throws. `2 ** 30` ≈ 1.07 billion entries (~8 GB of pointers alone), far beyond any practical use.
## Mitigations (for users who cannot upgrade immediately)
- Validate/clamp any externally supplied `List` index or `setIn`/`updateIn` key-path segment against a sane maximum before passing it to immutable.
- Reject numeric path segments `≥ 2 ** 30`.
- Run request handling in a worker that can be restarted, and cap the heap (`--max-old-space-size`) so an abort is contained.
Check warning on line 1 in immutable:5.1.5
github-actions / Quality Monitor
OWASP Dependency Check: GHSA-xvcm-6775-5m9r
## Summary
`Immutable.Map` and `Immutable.Set` keep keys that share the same 32-bit hash in a collision bucket that is scanned linearly. The string hash is public and deterministic, so an attacker who controls the **keys** inserted into a Map can craft many keys that all collide, degrading insertion and lookup from amortized O(1) to O(n) per operation — and O(n²) to build or read the whole set. A small, attacker-shaped payload can therefore consume disproportionate CPU and, on a single-threaded runtime such as Node.js, stall the event loop and deny service.
## Details
The string hash uses the JVM-style polynomial `hashed = (31 * hashed + charCode) | 0`. Strings such as `"Aa"` and `"BB"` hash to the same value (`65*31+97 == 66*31+66 == 2112`), and concatenating such blocks yields `2^n` distinct strings sharing one hash (40 characters ⇒ >1,000,000 colliding keys).
All such keys route to a single `HashCollisionNode`, whose `get`/`update` walk the entire bucket testing `is()`. There is no per-process salt, so the colliding set is fully precomputable from the open-source algorithm.
## Proof of concept
Inserting N colliding keys (e.g. via `Immutable.Map(obj)` / `Immutable.fromJS(obj)`) is O(N²). Measured on one machine, ~8,000 colliding
keys take ~0.7 s to build and ~0.6 s to read, scaling ×4 per doubling; ~16,000 keys exceed several seconds.
## Impact
CPU-bound denial of service in applications that ingest attacker-controlled object **keys** into Immutable structures, e.g. `Immutable.Map(req.body)`, `Immutable.fromJS(req.body)`, `state.merge(userObject)` / `mergeDeep(...)`. Applications that only store attacker input as **values** under fixed keys are not affected.
## Affected versions
All versions through `5.1.7` (the deterministic string hash and linear collision bucket have existed since the 4.x line).
## Patches
Fixed in `5.1.8` _(adjust to the actual release)_: large collision buckets are indexed by a per-process **seeded** secondary hash, restoring near-linear behavior for the affected paths. The public `hash()` is unchanged (no breaking change), and `is()` remains the sole authority on key equality.
## Workarounds
Before passing untrusted data to Immutable.js: cap request body size, limit object key count/length, and reject high-cardinality payloads; avoid building Maps directly from untrusted object keys.
## References
- CWE-407 (Inefficient Algorithmic Complexity), CWE-400 (Uncontrolled Resource Consumption)
- OWASP API4:2023 (Unrestricted Resource Consumption)
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2016-9299
The remoting module in Jenkins before 2.32 and LTS before 2.19.3 allows remote attackers to execute arbitrary code via a crafted serialized Java object, which triggers an LDAP query to a third-party server.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2017-1000353
Jenkins versions 2.56 and earlier as well as 2.46.1 LTS and earlier are vulnerable to an unauthenticated remote code execution. An unauthenticated remote code execution vulnerability allowed attackers to transfer a serialized Java `SignedObject` object to the Jenkins CLI, that would be deserialized using a new `ObjectInputStream`, bypassing the existing blacklist-based protection mechanism. We're fixing this issue by adding `SignedObject` to the blacklist. We're also backporting the new HTTP CLI protocol from Jenkins 2.54 to LTS 2.46.2, and deprecating the remoting-based (i.e. Java serialization) CLI protocol, disabling it by default.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2018-1000861
A code execution vulnerability exists in the Stapler web framework used by Jenkins 2.153 and earlier, LTS 2.138.3 and earlier in stapler/core/src/main/java/org/kohsuke/stapler/MetaClass.java that allows attackers to invoke some methods on Java objects by accessing crafted URLs that were not intended to be invoked this way.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21690
Agent processes are able to completely bypass file path filtering by wrapping the file operation in an agent file path in Jenkins 2.318 and earlier, LTS 2.303.2 and earlier.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21691
Creating symbolic links is possible without the 'symlink' agent-to-controller access control permission in Jenkins 2.318 and earlier, LTS 2.303.2 and earlier.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21692
FilePath#renameTo and FilePath#moveAllChildrenTo in Jenkins 2.318 and earlier, LTS 2.303.2 and earlier only check 'read' agent-to-controller access permission on the source path, instead of 'delete'.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21693
When creating temporary files, agent-to-controller access to create those files is only checked after they've been created in Jenkins 2.318 and earlier, LTS 2.303.2 and earlier.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21694
FilePath#toURI, FilePath#hasSymlink, FilePath#absolutize, FilePath#isDescendant, and FilePath#get*DiskSpace do not check any permissions in Jenkins 2.318 and earlier, LTS 2.303.2 and earlier.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21696
Jenkins 2.318 and earlier, LTS 2.303.2 and earlier does not limit agent read/write access to the libs/ directory inside build directories when using the FilePath APIs, allowing attackers in control of agent processes to replace the code of a trusted library with a modified variant. This results in unsandboxed code execution in the Jenkins controller process.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2024-23897
Jenkins 2.441 and earlier, LTS 2.426.2 and earlier does not disable a feature of its CLI command parser that replaces an '@' character followed by a file path in an argument with the file's contents, allowing unauthenticated attackers to read arbitrary files on the Jenkins controller file system.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21685
Jenkins 2.318 and earlier, LTS 2.303.2 and earlier does not check agent-to-controller access to create parent directories in FilePath#mkdirs.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21687
Jenkins 2.318 and earlier, LTS 2.303.2 and earlier does not check agent-to-controller access to create symbolic links when unarchiving a symbolic link in FilePath#untar.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21689
FilePath#unzip and FilePath#untar were not subject to any agent-to-controller access control in Jenkins 2.318 and earlier, LTS 2.303.2 and earlier.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2021-21697
Jenkins 2.318 and earlier, LTS 2.303.2 and earlier allows any agent to read and write the contents of any build directory stored in Jenkins with very few restrictions.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2017-1000354
Jenkins versions 2.56 and earlier as well as 2.46.1 LTS and earlier are vulnerable to a login command which allowed impersonating any Jenkins user. The `login` command available in the remoting-based CLI stored the encrypted user name of the successfully authenticated user in a cache file used to authenticate further commands. Users with sufficient permission to create secrets in Jenkins, and download their encrypted values (e.g. with Job/Configure permission), were able to impersonate any other Jenkins user on the same instance.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2017-1000356
Jenkins versions 2.56 and earlier as well as 2.46.1 LTS and earlier are vulnerable to an issue in the Jenkins user database authentication realm: create an account if signup is enabled; or create an account if the victim is an administrator, possibly deleting the existing default admin user in the process and allowing a wide variety of impacts.
Check warning on line 1 in jenkins-core-2.555.3.jar: jenkins.exe
github-actions / Quality Monitor
OWASP Dependency Check: CVE-2017-1000393
Jenkins 2.73.1 and earlier, 2.83 and earlier users with permission to create or configure agents in Jenkins could configure a launch method called 'Launch agent via execution of command on master'. This allowed them to run arbitrary shell commands on the master node whenever the agent was supposed to be launched. Configuration of this launch method now requires the Run Scripts permission typically only granted to administrators.