<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 11 Nov 2026 08:38:24 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-58273</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-58273</link>
      <description>&lt;p&gt;Rucio is a scientific data management framework. From 1.16.1 until 35.9.0, 38.6.0, and 41.0.0rc1, the /credentials/signurl endpoint reads X-Rucio-Account instead of the account stored in request.environ[&amp;#39;issuer&amp;#39;] by token authentication. Any authenticated low-privilege user can supply root as the header value and pass the root-only get_signed_url permission check. The server then returns a presigned read, write, or delete URL for an attacker-selected object using stored S3, GCS, or Swift credentials, and X-Rucio-VO can select another tenant in multi-VO deployments. This permits data disclosure, modification, deletion, and cross-tenant access on cloud-backed RSEs. This issue is fixed in versions 35.9.0, 38.6.0, and 41.0.0rc1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Rucio is a scientific data management framework. From 1.16.1 until 35.9.0, 38.6.0, and 41.0.0rc1, the /credentials/signurl endpoint reads X-Rucio-Account instead of the account stored in request.environ[&amp;#39;issuer&amp;#39;] by token authentication. Any authenticated low-privilege user can supply root as the header value and pass the root-only get_signed_url permission check. The server then returns a presigned read, write, or delete URL for an attacker-selected object using stored S3, GCS, or Swift credentials, and X-Rucio-VO can select another tenant in multi-VO deployments. This permits data disclosure, modification, deletion, and cross-tenant access on cloud-backed RSEs. This issue is fixed in versions 35.9.0, 38.6.0, and 41.0.0rc1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-58273</guid>
    </item>
    <item>
      <title>GHSA-5j9r-fx4x-rpvg — rucio has an Authorization Bypass on REST API endpoint for signing URLs</title>
      <link>https://db.gcve.eu/vuln/ghsa-5j9r-fx4x-rpvg</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: rucio&lt;/p&gt;
&lt;p&gt;## Summary
The `/credentials/signurl` endpoint decides authorization from the client-supplied `X-Rucio-Account` HTTP header instead of the authenticated token&amp;#39;s account. Any client holding **any** valid auth token (even a low-privilege account they legitimately own) can send `X-Rucio-Account: root` to pass the root-only permission check and have the Rucio server mint a presigned **read / write / delete** URL for an **arbitrary** object, signed with the RSE&amp;#39;s stored S3 / GCS / Swift credentials.&lt;/p&gt;
&lt;p&gt;## Details
`SignURL.get()` takes the authorization principal from a request header and
never uses the token-authenticated identity:&lt;/p&gt;
&lt;p&gt;```python
# lib/rucio/web/rest/flaskapi/v1/credentials.py
account = request.headers.get(&amp;#39;X-Rucio-Account&amp;#39;, default=None)     # L165  (attacker-controlled)
...
result = get_signed_url(account, rse=rse, service=service,         # L194
                        operation=operation, url=url, lifetime=lifetime, vo=vo)
```&lt;/p&gt;
&lt;p&gt;The gateway then uses that header value as the `issuer` for the permission check:&lt;/p&gt;
&lt;p&gt;```python
# lib/rucio/gateway/credential.py
auth_result = permission.has_permission(issuer=account, vo=vo,     # L57
                                        action=&amp;#39;get_signed_url&amp;#39;, kwargs=kwargs, ...)
```&lt;/p&gt;
&lt;p&gt;and the permission function is root-only:&lt;/p&gt;
&lt;p&gt;```python
# lib/rucio/core/permission/generic.py
def perm_get_signed_url(issuer, kwargs, session):
    return _is_root(issuer)        # _is_root(x) -&amp;gt; x.external == &amp;#39;root&amp;#39;
```&lt;/p&gt;
&lt;p&gt;`InternalAccount(&amp;#39;root&amp;#39;, vo).external…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: rucio&lt;/p&gt;
&lt;p&gt;## Summary
The `/credentials/signurl` endpoint decides authorization from the client-supplied `X-Rucio-Account` HTTP header instead of the authenticated token&amp;#39;s account. Any client holding **any** valid auth token (even a low-privilege account they legitimately own) can send `X-Rucio-Account: root` to pass the root-only permission check and have the Rucio server mint a presigned **read / write / delete** URL for an **arbitrary** object, signed with the RSE&amp;#39;s stored S3 / GCS / Swift credentials.&lt;/p&gt;
&lt;p&gt;## Details
`SignURL.get()` takes the authorization principal from a request header and
never uses the token-authenticated identity:&lt;/p&gt;
&lt;p&gt;```python
# lib/rucio/web/rest/flaskapi/v1/credentials.py
account = request.headers.get(&amp;#39;X-Rucio-Account&amp;#39;, default=None)     # L165  (attacker-controlled)
...
result = get_signed_url(account, rse=rse, service=service,         # L194
                        operation=operation, url=url, lifetime=lifetime, vo=vo)
```&lt;/p&gt;
&lt;p&gt;The gateway then uses that header value as the `issuer` for the permission check:&lt;/p&gt;
&lt;p&gt;```python
# lib/rucio/gateway/credential.py
auth_result = permission.has_permission(issuer=account, vo=vo,     # L57
                                        action=&amp;#39;get_signed_url&amp;#39;, kwargs=kwargs, ...)
```&lt;/p&gt;
&lt;p&gt;and the permission function is root-only:&lt;/p&gt;
&lt;p&gt;```python
# lib/rucio/core/permission/generic.py
def perm_get_signed_url(issuer, kwargs, session):
    return _is_root(issuer)        # _is_root(x) -&amp;gt; x.external == &amp;#39;root&amp;#39;
```&lt;/p&gt;
&lt;p&gt;`InternalAccount(&amp;#39;root&amp;#39;, vo).external…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-5j9r-fx4x-rpvg</guid>
    </item>
  </channel>
</rss>
