<?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://cve.radiocsirt.org</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>Thu, 08 Oct 2026 07:52:39 +0000</lastBuildDate>
    <item>
      <title>bdu:2026-07454</title>
      <link>https://cve.radiocsirt.org/vuln/bdu:2026-07454</link>
      <description>bdu:2026-07454</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/bdu:2026-07454</guid>
    </item>
    <item>
      <title>EUVD-2026-328621</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-328621</link>
      <description>EUVD-2026-328621</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-328621</guid>
    </item>
    <item>
      <title>fkie_cve-2026-45675</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-45675</link>
      <description>&lt;p&gt;Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.0, the LDAP and OAuth authentication flows use a TOCTOU (Time-of-Check-Time-of-Use) pattern for first-user admin role assignment. The regular signup handler (signup_handler in auths.py, line 663) was explicitly patched to prevent this race with the comment &amp;#34;Insert with default role first to avoid TOCTOU race&amp;#34;, but the LDAP and OAuth code paths were never updated with the same fix. This vulnerability is fixed in 0.9.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Open WebUI is a self-hosted artificial intelligence platform designed to operate entirely offline. Prior to 0.9.0, the LDAP and OAuth authentication flows use a TOCTOU (Time-of-Check-Time-of-Use) pattern for first-user admin role assignment. The regular signup handler (signup_handler in auths.py, line 663) was explicitly patched to prevent this race with the comment &amp;#34;Insert with default role first to avoid TOCTOU race&amp;#34;, but the LDAP and OAuth code paths were never updated with the same fix. This vulnerability is fixed in 0.9.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-45675</guid>
    </item>
    <item>
      <title>GHSA-h3ww-q6xx-w7x3 — Open WebUI: LDAP and OAuth First-User Race Condition Allows Multiple Admin Accounts</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-h3ww-q6xx-w7x3</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The LDAP and OAuth authentication flows use a TOCTOU (Time-of-Check-Time-of-Use) pattern for first-user admin role assignment. The regular signup handler (`signup_handler` in auths.py, line 663) was explicitly patched to prevent this race with the comment *&amp;#34;Insert with default role first to avoid TOCTOU race&amp;#34;*, but the LDAP and OAuth code paths were never updated with the same fix.&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;### LDAP (auths.py, lines 479-490)
```python
# Line 482 - CHECK: is the user table empty?
role = &amp;#39;admin&amp;#39; if not Users.has_users(db=db) else request.app.state.config.DEFAULT_USER_ROLE&lt;/p&gt;
&lt;p&gt;# Lines 484-490 - USE: create user with the role determined above
user = Auths.insert_new_auth(
    email=email,
    password=str(uuid.uuid4()),
    name=cn,
    role=role,   # &amp;lt;-- role was determined BEFORE insert, race window exists
    db=db,
)
```&lt;/p&gt;
&lt;p&gt;### OAuth (oauth.py, lines 1103-1112, 1566-1574)
```python
# Line 1104 - CHECK: count users
def get_user_role(self, user, user_data):
    user_count = Users.get_num_users()
    if not user and user_count == 0:
        return &amp;#39;admin&amp;#39;    # Line 1112&lt;/p&gt;
&lt;p&gt;# Lines 1566-1574 - USE: create user with pre-determined role
user = Auths.insert_new_auth(
    ...
    role=self.get_user_role(None, user_data),  # Line 1571
    ...
)
```&lt;/p&gt;
&lt;p&gt;Both paths determine the role BEFORE inserting the user, creating a race window where multiple concurrent requests on a fresh instance can all observe an empty database and all receive the `admin` role.&lt;/p&gt;
&lt;p&gt;## Comparison wit…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The LDAP and OAuth authentication flows use a TOCTOU (Time-of-Check-Time-of-Use) pattern for first-user admin role assignment. The regular signup handler (`signup_handler` in auths.py, line 663) was explicitly patched to prevent this race with the comment *&amp;#34;Insert with default role first to avoid TOCTOU race&amp;#34;*, but the LDAP and OAuth code paths were never updated with the same fix.&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;### LDAP (auths.py, lines 479-490)
```python
# Line 482 - CHECK: is the user table empty?
role = &amp;#39;admin&amp;#39; if not Users.has_users(db=db) else request.app.state.config.DEFAULT_USER_ROLE&lt;/p&gt;
&lt;p&gt;# Lines 484-490 - USE: create user with the role determined above
user = Auths.insert_new_auth(
    email=email,
    password=str(uuid.uuid4()),
    name=cn,
    role=role,   # &amp;lt;-- role was determined BEFORE insert, race window exists
    db=db,
)
```&lt;/p&gt;
&lt;p&gt;### OAuth (oauth.py, lines 1103-1112, 1566-1574)
```python
# Line 1104 - CHECK: count users
def get_user_role(self, user, user_data):
    user_count = Users.get_num_users()
    if not user and user_count == 0:
        return &amp;#39;admin&amp;#39;    # Line 1112&lt;/p&gt;
&lt;p&gt;# Lines 1566-1574 - USE: create user with pre-determined role
user = Auths.insert_new_auth(
    ...
    role=self.get_user_role(None, user_data),  # Line 1571
    ...
)
```&lt;/p&gt;
&lt;p&gt;Both paths determine the role BEFORE inserting the user, creating a race window where multiple concurrent requests on a fresh instance can all observe an empty database and all receive the `admin` role.&lt;/p&gt;
&lt;p&gt;## Comparison wit…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-h3ww-q6xx-w7x3</guid>
    </item>
    <item>
      <title>PYSEC-2026-2730 — Open WebUI: LDAP and OAuth First-User Race Condition Allows Multiple Admin Accounts</title>
      <link>https://cve.radiocsirt.org/vuln/pysec-2026-2730</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The LDAP and OAuth authentication flows use a TOCTOU (Time-of-Check-Time-of-Use) pattern for first-user admin role assignment. The regular signup handler (`signup_handler` in auths.py, line 663) was explicitly patched to prevent this race with the comment *&amp;#34;Insert with default role first to avoid TOCTOU race&amp;#34;*, but the LDAP and OAuth code paths were never updated with the same fix.&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;### LDAP (auths.py, lines 479-490)
```python
# Line 482 - CHECK: is the user table empty?
role = &amp;#39;admin&amp;#39; if not Users.has_users(db=db) else request.app.state.config.DEFAULT_USER_ROLE&lt;/p&gt;
&lt;p&gt;# Lines 484-490 - USE: create user with the role determined above
user = Auths.insert_new_auth(
    email=email,
    password=str(uuid.uuid4()),
    name=cn,
    role=role,   # &amp;lt;-- role was determined BEFORE insert, race window exists
    db=db,
)
```&lt;/p&gt;
&lt;p&gt;### OAuth (oauth.py, lines 1103-1112, 1566-1574)
```python
# Line 1104 - CHECK: count users
def get_user_role(self, user, user_data):
    user_count = Users.get_num_users()
    if not user and user_count == 0:
        return &amp;#39;admin&amp;#39;    # Line 1112&lt;/p&gt;
&lt;p&gt;# Lines 1566-1574 - USE: create user with pre-determined role
user = Auths.insert_new_auth(
    ...
    role=self.get_user_role(None, user_data),  # Line 1571
    ...
)
```&lt;/p&gt;
&lt;p&gt;Both paths determine the role BEFORE inserting the user, creating a race window where multiple concurrent requests on a fresh instance can all observe an empty database and all receive the `admin` role.&lt;/p&gt;
&lt;p&gt;## Comparison wit…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: open-webui&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The LDAP and OAuth authentication flows use a TOCTOU (Time-of-Check-Time-of-Use) pattern for first-user admin role assignment. The regular signup handler (`signup_handler` in auths.py, line 663) was explicitly patched to prevent this race with the comment *&amp;#34;Insert with default role first to avoid TOCTOU race&amp;#34;*, but the LDAP and OAuth code paths were never updated with the same fix.&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;### LDAP (auths.py, lines 479-490)
```python
# Line 482 - CHECK: is the user table empty?
role = &amp;#39;admin&amp;#39; if not Users.has_users(db=db) else request.app.state.config.DEFAULT_USER_ROLE&lt;/p&gt;
&lt;p&gt;# Lines 484-490 - USE: create user with the role determined above
user = Auths.insert_new_auth(
    email=email,
    password=str(uuid.uuid4()),
    name=cn,
    role=role,   # &amp;lt;-- role was determined BEFORE insert, race window exists
    db=db,
)
```&lt;/p&gt;
&lt;p&gt;### OAuth (oauth.py, lines 1103-1112, 1566-1574)
```python
# Line 1104 - CHECK: count users
def get_user_role(self, user, user_data):
    user_count = Users.get_num_users()
    if not user and user_count == 0:
        return &amp;#39;admin&amp;#39;    # Line 1112&lt;/p&gt;
&lt;p&gt;# Lines 1566-1574 - USE: create user with pre-determined role
user = Auths.insert_new_auth(
    ...
    role=self.get_user_role(None, user_data),  # Line 1571
    ...
)
```&lt;/p&gt;
&lt;p&gt;Both paths determine the role BEFORE inserting the user, creating a race window where multiple concurrent requests on a fresh instance can all observe an empty database and all receive the `admin` role.&lt;/p&gt;
&lt;p&gt;## Comparison wit…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/pysec-2026-2730</guid>
    </item>
  </channel>
</rss>
