<?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>Mon, 12 Oct 2026 21:29:38 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-308484</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-308484</link>
      <description>EUVD-2026-308484</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-308484</guid>
    </item>
    <item>
      <title>fkie_cve-2026-41571</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-41571</link>
      <description>&lt;p&gt;Note Mark is an open-source note-taking application. In version 0.19.2, IsPasswordMatch in backend/db/models.go falls back to a hard-coded bcrypt(&amp;#34;null&amp;#34;) placeholder whenever a user has no stored password. OIDC-registered users are created with an empty password, so anyone who submits password: &amp;#34;null&amp;#34; to the internal login endpoint receives a valid session for that user. The bypass is unauthenticated and requires no user interaction. This issue has been patched in version 0.19.3.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Note Mark is an open-source note-taking application. In version 0.19.2, IsPasswordMatch in backend/db/models.go falls back to a hard-coded bcrypt(&amp;#34;null&amp;#34;) placeholder whenever a user has no stored password. OIDC-registered users are created with an empty password, so anyone who submits password: &amp;#34;null&amp;#34; to the internal login endpoint receives a valid session for that user. The bypass is unauthenticated and requires no user interaction. This issue has been patched in version 0.19.3.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-41571</guid>
    </item>
    <item>
      <title>GHSA-pxf8-6wqm-r6hh — Note Mark: OIDC-registered users authenticated by submitting password "null"</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-pxf8-6wqm-r6hh</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/enchant97/note-mark/backend&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`IsPasswordMatch` in `backend/db/models.go` falls back to a hard-coded `bcrypt(&amp;#34;null&amp;#34;)` placeholder whenever a user has no stored password. OIDC-registered users are created with an empty password, so anyone who submits `password: &amp;#34;null&amp;#34;` to the internal login endpoint receives a valid session for that user. The bypass is unauthenticated and requires no user interaction.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;`backend/db/models.go:36` defines the placeholder hash used by the timing-attack mitigation inside `IsPasswordMatch`:&lt;/p&gt;
&lt;p&gt;```go
var nullPasswordHash, _ = bcrypt.GenerateFromPassword([]byte(&amp;#34;null&amp;#34;), bcrypt.DefaultCost)
```&lt;/p&gt;
&lt;p&gt;`IsPasswordMatch` (`backend/db/models.go:46-58`) substitutes that placeholder when the stored password is empty:&lt;/p&gt;
&lt;p&gt;```go
func (u *User) IsPasswordMatch(plainPassword string) bool {
    var current []byte
    if len(u.Password) == 0 {
        // prevent CWE-208
        current = nullPasswordHash
    } else {
        current = u.Password
    }
    if err := bcrypt.CompareHashAndPassword(current, []byte(plainPassword)); err == nil {
        return true
    }
    return false
}
```&lt;/p&gt;
&lt;p&gt;OIDC-registered users are stored with an empty password at `backend/services/auth.go:102-115`:&lt;/p&gt;
&lt;p&gt;```go
return db.DB.Transaction(func(tx *gorm.DB) error {
    user := db.User{
        Username: username,
        Password: []byte(&amp;#34;&amp;#34;),
    }
    // ...
})
```&lt;/p&gt;
&lt;p&gt;The internal login endpoint (`POST /api/auth/token`, handled at `backend/services/auth.go:20-54`) calls `IsPasswordMatch` with the caller-su…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/enchant97/note-mark/backend&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`IsPasswordMatch` in `backend/db/models.go` falls back to a hard-coded `bcrypt(&amp;#34;null&amp;#34;)` placeholder whenever a user has no stored password. OIDC-registered users are created with an empty password, so anyone who submits `password: &amp;#34;null&amp;#34;` to the internal login endpoint receives a valid session for that user. The bypass is unauthenticated and requires no user interaction.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;`backend/db/models.go:36` defines the placeholder hash used by the timing-attack mitigation inside `IsPasswordMatch`:&lt;/p&gt;
&lt;p&gt;```go
var nullPasswordHash, _ = bcrypt.GenerateFromPassword([]byte(&amp;#34;null&amp;#34;), bcrypt.DefaultCost)
```&lt;/p&gt;
&lt;p&gt;`IsPasswordMatch` (`backend/db/models.go:46-58`) substitutes that placeholder when the stored password is empty:&lt;/p&gt;
&lt;p&gt;```go
func (u *User) IsPasswordMatch(plainPassword string) bool {
    var current []byte
    if len(u.Password) == 0 {
        // prevent CWE-208
        current = nullPasswordHash
    } else {
        current = u.Password
    }
    if err := bcrypt.CompareHashAndPassword(current, []byte(plainPassword)); err == nil {
        return true
    }
    return false
}
```&lt;/p&gt;
&lt;p&gt;OIDC-registered users are stored with an empty password at `backend/services/auth.go:102-115`:&lt;/p&gt;
&lt;p&gt;```go
return db.DB.Transaction(func(tx *gorm.DB) error {
    user := db.User{
        Username: username,
        Password: []byte(&amp;#34;&amp;#34;),
    }
    // ...
})
```&lt;/p&gt;
&lt;p&gt;The internal login endpoint (`POST /api/auth/token`, handled at `backend/services/auth.go:20-54`) calls `IsPasswordMatch` with the caller-su…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-pxf8-6wqm-r6hh</guid>
    </item>
  </channel>
</rss>
