Agent-to-controller access control allowed writing to sensitive directory used by Jenkins Pipeline: Shared Groovy Libraries Plugin
Research is free — Hunters explains how the bug works, the root-cause code pattern, how the fix addresses it, and how to test whether a target is affected, in chat. Investigate & write exploit is a paid run — the engine reads the advisory and fix commits, then builds and validates a working proof-of-concept exploit with reproduction steps.
Affected versions
Details
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. This directory is used by the Pipeline: Shared Groovy Libraries Plugin to store copies of shared libraries. This allows attackers in control of agent processes to replace the code of a trusted library with a modified variant, resulting in unsandboxed code execution in the Jenkins controller process. Jenkins 2.319, LTS 2.303.3 prohibits agent read/write access to the `libs/` directory inside build directories. If you are unable to immediately upgrade to Jenkins 2.319, LTS 2.303.3, you can install the [Remoting Security Workaround Plugin](https://www.jenkins.io/redirect/remoting-security-workaround/). It will prevent all agent-to-controller file access using FilePath APIs. Because it is more restrictive than Jenkins 2.319, LTS 2.303.3, more plugins are incompatible with it. Make sure to read the plugin documentation before installing it. It is not easily possible to [customize the file access rules](https://www.jenkins.io/doc/book/security/controller-isolation/agent-to-controller/#file-access-rules) to prohibit access to the `libs/` directory specifically, as built-in rules (granting access to `<BUILDDIR>` contents) would take precedence over a custom rule prohibiting access.
The fix
[SECURITY-2423]
core/src/main/resources/jenkins/security/s2m/filepath-filter.conf+2 −0
@@ -26,6 +26,8 @@ deny all <BUILDDIR>/build.xml# Similarly for Pipeline build (WorkflowRun) metadata:deny all <BUILDDIR>/program.datdeny all <BUILDDIR>/workflow($|/.*)+deny all <BUILDDIR>/libs($|/.*)+deny all <BUILDDIR>/checkpoints($|/.*)# Various plugins read/write files under build directories, so allow them all.# - git 1.x writes changelog.xml from the agent (2.x writes from the master so need not be listed)
References
- ADVISORYhttps://nvd.nist.gov/vuln/detail/CVE-2021-21696
- WEBhttps://github.com/jenkinsci/jenkins/commit/93451e20c20cfd84badeb0f37c38d4c0c7a5dad3
- PACKAGEhttps://github.com/jenkinsci/jenkins
- WEBhttps://www.jenkins.io/security/advisory/2021-11-04/#SECURITY-2423
- WEBhttp://www.openwall.com/lists/oss-security/2021/11/04/3