
Loading

Loading
We use strictly necessary cookies to run this site, and analytics cookies to understand how it's used. See our Privacy Policy for details.
A GitHub-reviewed security advisory, not necessarily under active exploitation the way our CISA KEV advisories are, but a real, disclosed vulnerability in an open-source dependency.
Affected packages
Vulnerable: >= 1.14.0.post1, < 35.9.1
Patched in 35.9.1
Vulnerable: >= 36.0.0rc1, < 38.6.1
Patched in 38.6.1
Vulnerable: >= 39.0.0rc1, < 40.4.2
Patched in 40.4.2
Vulnerable: >= 41.0.0rc1, < 41.1.1
Patched in 41.1.1
Details
SSH challenge tokens are mistakenly accepted as valid credentials during the authentication token validation process.
While an SSH challenge token is intended as a short-lived nonce for use in a subsequent SSH key exchange, the function to validate authentication tokens does not differentiate between these and actual authentication tokens. Because challenge tokens are generated based on an account name provided via headers without requiring prior authentication, an unauthenticated attacker can request a valid "challenge" token for any account (including administrative ones) and use it to authenticate against other API endpoints.
The vulnerability exists because SSH challenge tokens are stored in the same database table as regular authentication tokens and validate_auth_token in lib/rucio/core/authentication.py accepts these "challenge" tokens. An attacker can obtain a challenge token for an account such as “root” via the REST API and then present it as a valid authentication bearer token:
curl -i -H "X-Rucio-Account: root" https://rucio/auth/ssh_challenge_token200 OK with the header X-Rucio-SSH-Challenge-Token.curl -H "X-Rucio-Auth-Token: $CHALLENGE_TOKEN" https://rucio/accounts/whoamiMore pip advisories
Talk to us about this
Find out whether this dependency (or others like it) is actually reachable in your codebase.
Get help patching, or building dependency-scanning into your pipeline going forward.
A secure code review or supply chain review finds this before an advisory does.