CVE-2024-45339
High · 7.1CVSS
7.1
EPSS
0.3%
Published
Jan 28, 2025
CISA due date
—
Cloudanix analysis
A logging issue lets attackers with local access overwrite important system files by tricking privileged programs into following a link they create.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
In glog, when the default log directory is world-writable, an attacker can predict the log file path of a privileged process and pre-create a symlink pointing to a sensitive target file; the privileged process then follows the symlink and overwrites the target.
Why it matters to the business
Privileged processes using affected logging can be tricked into destroying or corrupting critical system files, leading to denial of service, configuration loss, or privilege escalation on affected Red Hat OpenShift coreos-installer deployments.
How an attack unfolds
An attacker with local access enumerates the predictable log path, creates a symlink to a sensitive file such as /etc/shadow or a configuration file, waits for the privileged process to start logging, and causes the process to follow the symlink and overwrite the target file.
How to fix it
Upgrade coreos-installer, coreos-installer-bootinfra, coreos-installer-bootinfra-debuginfo, coreos-installer-debuginfo, and coreos-installer-debugsource packages on Red Hat OpenShift 4.9 to version 0:0.10.1-1.rhaos4.9.el8 or later; restrict log directory permissions to prevent world-writable access.
How to confirm the fix worked
Verify installed package versions match or exceed the fixed releases, confirm that glog now exits with status 2 when a log file path already exists, and test that no symlink can be followed during log initialization.
Typical attack path
- Identify a world-writable directory used for logs by the target process
- Predict the exact log file path the privileged process will create
- Pre-create a symlink at that path pointing to a sensitive target file
- Trigger or wait for the privileged process to initialize logging
- Observe or confirm that the sensitive target file has been overwritten
How to detect it
Search system and application logs for unexpected exits with status code 2 mentioning existing log files, inspect for symlinks in log directories that point outside expected paths, and review file modification timestamps on sensitive targets that coincide with log initialization times.
What your security team should do
- Immediately schedule upgrades to the fixed package versions listed for each affected coreos-installer component
- Audit and tighten permissions on any directories used for application or system logs
- Monitor for processes unexpectedly exiting with status code 2 related to log file conflicts
- Review privileged services that rely on glog for logging and apply least-privilege directory controls
The record
When logs are written to a widely-writable directory (the default), an unprivileged attacker may predict a privileged process's log file path and pre-create a symbolic link to a sensitive file in its place. When that privileged process runs, it will follow the planted symlink and overwrite that sensitive file. To fix that, glog now causes the program to exit (with status code 2) when it finds that the configured log file already exists.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/golang/glog | 0 | 1.2.4 |
| Chainguard | amass | 0 | 4.2.0-r18 |
| Chainguard | caddy | 0 | 2.9.1-r3 |
| Chainguard | caddy-fips | 0 | 2.9.1-r3 |
| Chainguard | caddy-man | 0 | 2.9.1-r3 |
| Chainguard | caddy-src | 0 | 2.9.1-r3 |
| Chainguard | cert-exporter | 0 | 2.14.0-r5 |
| Chainguard | cert-exporter-fips | 0 | 2.14.0-r5 |
| Chainguard | cluster-proportional-autoscaler | 0 | 1.9.0-r5 |
| Chainguard | cluster-proportional-autoscaler-compat | 0 | 1.9.0-r5 |
| Chainguard | cluster-proportional-autoscaler-fips | 0 | 1.9.0-r3 |
| Chainguard | crossplane-provider-family-gcp | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-family-gcp-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-cloudplatform | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-cloudplatform-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-compute | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-compute-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-container | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-container-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-dns | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-dns-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-family | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-kms | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-kms-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-pubsub | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-pubsub-compat | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-storage | 0 | 1.11.2-r4 |
| Chainguard | crossplane-provider-gcp-storage-compat | 0 | 1.11.2-r4 |
| Chainguard | dgraph | 0 | 24.0.5-r5 |
| Chainguard | flux-image-reflector-controller | 0 | 0.33.0-r8 |
| Chainguard | flux-image-reflector-controller-fips | 0 | 0.33.0-r6 |
| Chainguard | flux-image-reflector-controller-fips-iamguarded-compat | 0 | 0.33.0-r6 |
| Chainguard | flux-image-reflector-controller-iamguarded-compat | 0 | 0.33.0-r8 |
| Chainguard | flyte | 0 | 1.14.1-r3 |
| Chainguard | gatekeeper-3.15 | 0 | 3.15.1-r16 |
| Chainguard | gatekeeper-3.15-compat | 0 | 3.15.1-r16 |
| Chainguard | gatekeeper-3.15-crds | 0 | 3.15.1-r16 |
| Chainguard | gatekeeper-3.15-crds-compat | 0 | 3.15.1-r16 |
| Chainguard | gatekeeper-3.15-gator | 0 | 3.15.1-r16 |
| Chainguard | gatekeeper-3.16 | 0 | 3.16.3-r13 |
| Chainguard | gatekeeper-3.16-compat | 0 | 3.16.3-r13 |
| Chainguard | gatekeeper-3.16-crds | 0 | 3.16.3-r13 |
| Chainguard | gatekeeper-3.16-crds-compat | 0 | 3.16.3-r13 |
| Chainguard | gatekeeper-3.16-gator | 0 | 3.16.3-r13 |
| Chainguard | gatekeeper-3.17 | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-3.17-compat | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-3.17-crds | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-3.17-crds-compat | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-3.17-gator | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-3.18 | 0 | 3.18.2-r4 |
| Chainguard | gatekeeper-3.18-compat | 0 | 3.18.2-r4 |
| Chainguard | gatekeeper-3.18-crds | 0 | 3.18.2-r4 |
| Chainguard | gatekeeper-3.18-crds-compat | 0 | 3.18.2-r4 |
| Chainguard | gatekeeper-3.18-gator | 0 | 3.18.2-r4 |
| Chainguard | gatekeeper-fips-3.15 | 0 | 3.15.1-r11 |
| Chainguard | gatekeeper-fips-3.15-compat | 0 | 3.15.1-r11 |
| Chainguard | gatekeeper-fips-3.16 | 0 | 3.16.3-r7 |
| Chainguard | gatekeeper-fips-3.16-compat | 0 | 3.16.3-r7 |
| Chainguard | gatekeeper-fips-3.17 | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-fips-3.17-compat | 0 | 3.17.2-r2 |
| Chainguard | gatekeeper-fips-3.18 | 0 | 3.18.2-r4 |
| Chainguard | gatekeeper-fips-3.18-compat | 0 | 3.18.2-r4 |
| Chainguard | gitaly-17.5 | 0 | 17.5.5-r3 |
| Chainguard | gitaly-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-17.7 | 0 | 17.7.3-r1 |
| Chainguard | gitaly-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-backup-17.5 | 0 | 17.5.5-r3 |
| Chainguard | gitaly-backup-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-backup-17.7 | 0 | 17.7.3-r1 |
| Chainguard | gitaly-backup-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-backup-fips-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-backup-fips-17.7 | 0 | 17.7.3-r2 |
| Chainguard | gitaly-backup-fips-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-compat-17.5 | 0 | 17.5.5-r3 |
| Chainguard | gitaly-compat-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-compat-17.7 | 0 | 17.7.3-r1 |
| Chainguard | gitaly-compat-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-fips-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-fips-17.7 | 0 | 17.7.3-r2 |
| Chainguard | gitaly-fips-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-git-17.5 | 0 | 17.5.5-r3 |
| Chainguard | gitaly-git-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-git-17.7 | 0 | 17.7.3-r1 |
| Chainguard | gitaly-git-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-git-fips-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-git-fips-17.7 | 0 | 17.7.3-r2 |
| Chainguard | gitaly-git-fips-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-init-cgroups-17.5 | 0 | 17.5.5-r3 |
| Chainguard | gitaly-init-cgroups-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-init-cgroups-17.7 | 0 | 17.7.3-r1 |
| Chainguard | gitaly-init-cgroups-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-init-cgroups-compat-17.5 | 0 | 17.5.5-r3 |
| Chainguard | gitaly-init-cgroups-compat-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-init-cgroups-compat-17.7 | 0 | 17.7.3-r1 |
| Chainguard | gitaly-init-cgroups-compat-17.8 | 0 | 17.8.1-r2 |
| Chainguard | gitaly-init-cgroups-fips-17.6 | 0 | 17.6.4-r2 |
| Chainguard | gitaly-init-cgroups-fips-17.7 | 0 | 17.7.3-r2 |
| Chainguard | gitaly-init-cgroups-fips-17.8 | 0 | 17.8.1-r2 |
| Chainguard | go-ipfs-fips | 0 | 0.32.1-r5 |
| Chainguard | google-osconfig-agent | 0 | 20250122.00-r2 |
| Chainguard | grafana-10.4 | 0 | 10.4.15-r2 |
| Chainguard | grafana-10.4-oci-compat | 0 | 10.4.15-r2 |
| Chainguard | grafana-11.0 | 0 | 11.0.10-r2 |
| Chainguard | grafana-11.1 | 0 | 11.1.11-r1 |
| Chainguard | grafana-11.1-oci-compat | 0 | 11.1.11-r1 |
| Chainguard | grafana-11.2 | 0 | 11.2.10.01-r7 |
| Chainguard | grafana-11.2-oci-compat | 0 | 11.2.10.01-r7 |
| Chainguard | grafana-fips-10.4 | 0 | 10.4.15-r1 |
| Chainguard | grafana-fips-10.4-oci-compat | 0 | 10.4.15-r1 |
| Chainguard | grafana-fips-11.0 | 0 | 11.0.10-r2 |
| Chainguard | grafana-fips-11.0-oci-compat | 0 | 11.0.10-r2 |
| Chainguard | grafana-fips-11.1 | 0 | 11.1.11-r2 |
| Chainguard | grafana-fips-11.1-oci-compat | 0 | 11.1.11-r2 |
| Chainguard | grafana-fips-11.2 | 0 | 11.2.6-r1 |
| Chainguard | grafana-fips-11.2-oci-compat | 0 | 11.2.6-r1 |
| Chainguard | grafana-mimir | 0 | 2.15.0-r4 |
| Chainguard | grafana-mimir-fips | 0 | 2.15.0-r3 |
| Chainguard | grafana-mimir-metaconvert | 0 | 2.15.0-r4 |
| Chainguard | grafana-mimir-mimirtool | 0 | 2.15.0-r4 |
| Chainguard | grafana-mimir-query-tee | 0 | 2.15.0-r4 |
| Chainguard | grafana-oci-compat | 0 | 11.0.10-r2 |
| Chainguard | grafana-oci-compat | 0 | 11.1.11-r1 |
| Chainguard | ipfs | 0 | 0.33.0-r0 |
| Chainguard | kube-bench-configs-fips | 0 | 0.10.0-r0 |
| Chainguard | kube-bench-fips | 0 | 0.10.0-r0 |
| Chainguard | kubeflow | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-access-management | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-access-management-compat | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-access-management-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-access-management-fips-compat | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-admission-webhook | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-admission-webhook-compat | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-admission-webhook-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-admission-webhook-fips-compat | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-notebook-controller | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-notebook-controller-compat | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-notebook-controller-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-notebook-controller-fips-compat | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-pipelines | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-apiserver | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-cache-deployer | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-cache-deployer-compat | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-cache_server | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-frontend | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-metadata-envoy-config | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-metadata-writer | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-metadata-writer-compat | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-persistence_agent | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-scheduledworkflow | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-pipelines-viewer-crd-controller | 0 | 2.4.0-r2 |
| Chainguard | kubeflow-profile-controller | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-profile-controller-compat | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-profile-controller-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-profile-controller-fips-compat | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-pvcviewer-controller | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-pvcviewer-controller-compat | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-pvcviewer-controller-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-pvcviewer-controller-fips-compat | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-tensorboard-controller | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-tensorboard-controller-compat | 0 | 1.10.0-r3 |
| Chainguard | kubeflow-tensorboard-controller-fips | 0 | 1.10.0-r2 |
| Chainguard | kubeflow-tensorboard-controller-fips-compat | 0 | 1.10.0-r2 |
| Chainguard | kyverno-1.11 | 0 | 1.11.5-r10 |
| Chainguard | kyverno-1.11 | 0 | 1.11.5-r16 |
| Chainguard | kyverno-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-1.13 | 0 | 1.13.2-r7 |
| Chainguard | kyverno-background-controller-1.11 | 0 | 1.11.5-r10 |
| Chainguard | kyverno-background-controller-1.11 | 0 | 1.11.5-r16 |
| Chainguard | kyverno-background-controller-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-background-controller-1.13 | 0 | 1.13.2-r7 |
| Chainguard | kyverno-background-controller-fips-1.11 | 0 | 1.11.5-r15 |
| Chainguard | kyverno-background-controller-fips-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-background-controller-fips-1.13 | 0 | 1.13.2-r5 |
| Chainguard | kyverno-cleanup-controller-1.11 | 0 | 1.11.5-r10 |
| Chainguard | kyverno-cleanup-controller-1.11 | 0 | 1.11.5-r16 |
| Chainguard | kyverno-cleanup-controller-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-cleanup-controller-1.13 | 0 | 1.13.2-r7 |
| Chainguard | kyverno-cleanup-controller-fips-1.11 | 0 | 1.11.5-r15 |
| Chainguard | kyverno-cleanup-controller-fips-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-cleanup-controller-fips-1.13 | 0 | 1.13.2-r5 |
| Chainguard | kyverno-cli-1.11 | 0 | 1.11.5-r10 |
| Chainguard | kyverno-cli-1.11 | 0 | 1.11.5-r16 |
| Chainguard | kyverno-cli-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-cli-1.13 | 0 | 1.13.2-r7 |
| Chainguard | kyverno-cli-fips-1.11 | 0 | 1.11.5-r15 |
| Chainguard | kyverno-cli-fips-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-cli-fips-1.13 | 0 | 1.13.2-r5 |
| Chainguard | kyverno-fips-1.11 | 0 | 1.11.5-r15 |
| Chainguard | kyverno-fips-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-fips-1.13 | 0 | 1.13.2-r5 |
| Chainguard | kyverno-init-container-1.11 | 0 | 1.11.5-r10 |
| Chainguard | kyverno-init-container-1.11 | 0 | 1.11.5-r16 |
| Chainguard | kyverno-init-container-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-init-container-1.13 | 0 | 1.13.2-r7 |
| Chainguard | kyverno-init-container-fips-1.11 | 0 | 1.11.5-r15 |
| Chainguard | kyverno-init-container-fips-1.12 | 0 | 1.12.7-r2 |
| Chainguard | kyverno-init-container-fips-1.13 | 0 | 1.13.2-r5 |
| Chainguard | kyverno-notation-aws | 0 | 1.1-r3 |
Related vulnerabilities
- CVE-2026-27142 Actions which insert URLs into the content attribute of HTML meta tags are not escaped. Also affects amass
- CVE-2026-27139 On Unix platforms, when listing the contents of a directory using File.ReadDir or… Also affects amass
- CVE-2026-25679 url.Parse insufficiently validated the host/authority component and accepted some invalid… Also affects amass
- CVE-2026-26958 filippo.io/edwards25519 is a Go library implementing the edwards25519 elliptic curve with… Also affects amass
- CVE-2025-68121 During session resumption in crypto/tls, if the underlying Config has its ClientCAs or… Also affects amass
- CVE-2025-61732 A discrepancy between how Go and C/C++ comments were parsed allowed for code smuggling… Also affects amass
- CVE-2025-68119 Downloading and building modules with malicious version strings can cause local code… Also affects amass
- CVE-2025-61731 Building a malicious file with cmd/go can cause can cause a write to an… Also affects amass