CARVIEW |
Select Language
HTTP/2 200
date: Thu, 31 Jul 2025 07:36:48 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"f7e25fdfb3f3c8a0ba5a77832eddd5b0"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=bSYw6rzn3YB5MCcpYaYuPy7yJiQxThI%2FihLCfMRhNwg1SysD%2Bz4ADT6LFOM3ZTVjc2sHsdpHOP6feK6XuN%2FwLnhrXTzHGxueYlkjuOszw5YVzzdM4%2Bp%2FbjzellMdyj%2FkFkNGn7Yx9FEa5aMvqG8Iu%2ByZ%2FpdzhRDLHSRJp5PDVmGVEd7mW9cglY70GoFjFTKZESLf%2BZap5m7R779Ir%2BjoIM3tYOsv7PRoib9vS2pAPFIHBTvxYnxjpzXNCtpWwoJNy9vpDVxeq2%2BujEcgX4gAyA%3D%3D--3p08DWTnclQgEH0T--aXMfVb2RvDLbCTiX55EpPg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1889439981.1753947408; Path=/; Domain=github.com; Expires=Fri, 31 Jul 2026 07:36:48 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Fri, 31 Jul 2026 07:36:48 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: EE30:226082:53AB09:68F5A4:688B1D10
Linux Kernel: TOCTOU in Exec System · Advisory · google/security-research · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 480
Linux Kernel: TOCTOU in Exec System
Moderate
Package
Kernel
(Linux)
Affected versions
< https://nvd.nist.gov/vuln/detail/CVE-2024-43882
Patched versions
https://nvd.nist.gov/vuln/detail/CVE-2024-43882
Description
Severity
Moderate
CVE ID
CVE-2024-43882
Weaknesses
Weakness CWE-367
Time-of-check Time-of-use (TOCTOU) Race Condition
The product checks the state of a resource before using that resource, but the resource's state can change between the check and the use in a way that invalidates the results of the check. This can cause the product to perform invalid actions when the resource is in an unexpected state. Learn more on MITRE.
You can’t perform that action at this time.
Summary
There is a Time-of-Check / Time-of-Use issue in the Linux kernel in the exec system calls. The executability permissions are checked at a different time than the set-user-ID bit is applied. This could lead to privilege escalation.
Let’s imagine a binary that would give an attacker some power if they could somehow run it with a set-user-ID bit set. There are two states that should be safe for this binary:
Yet, because of the race condition above, transitioning between these two safe states is itself NOT safe. This turns out to be exploitable in the real world (see below).
Severity
Moderate - Exploitation could lead to privilege escalation.
Proof of Concept
(tested at commit:
5189dafa4cf950e675f02ee04b577dfbbad0d9b1
)Consider a checker program that prints a message if it is running as root:
Compiled into
./checker
, owned byroot:root
, with no permissions.We would also have a looping program that continuously changes the permissions between a set-user-ID binary and an executable binary. It is important to note that at no point the file should be both executable and set-user-ID.
This is compiled into
./looping
, ran byroot
.And then, run from a regular user:
Which will result in the binary being (sometimes) executed as a set-user-ID binary.
Further Analysis
In order to exploit this bug, you would need to be able to execute a program while its mode is changing. You will also need a program with enough privileges to change the file permissions, setting the set-user-ID bit.
This is somewhat common during program installation. For example, Debian says:
One way of doing it is with dpkg-statoverride.
Basically, we are looking for packages that install a set-user-ID binary restricted to some particular group.
For example, the
telnetd-ssl
Debian package, sets thetelnetlogin
binary as set-user-ID root, executable by members of thetelnetd-ssl
group. The binary permissions transition from0755
to04754
.By spamming executions of
/usr/lib/telnetlogin -f root
whiletelnetd-ssl
is being installed or updated, one can get a root shell.I haven’t analyzed other debian packages for affected binaries, nor looked into other Linux distributions.
FreeBSD and Mac OS seem to be unaffected (the poc binary doesn’t get executed or is executed without set-user-ID).
In summary, this is hard to exploit and requires a timing dependency on an action that might be outside of the control of an attacker.
Some possible fixes:
Check executability permissions when looking for the set-user-ID bit.
Delay modifying file permissions until after exec runs.
Status: Fix has landed in the Linux Kernel.
Timeline
Date reported: 08/08/2024
Date fixed: 08/13/2024
Date disclosed: 12/02/2024