<?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>Thu, 08 Oct 2026 16:00:07 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-107219</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-107219</link>
      <description>&lt;p&gt;Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.3.1 to 2.11.0, agile decryption accepts an attacker-controlled spinCount and performs that many password-key derivation iterations before verifier validation. OpenFile reaches agileDecrypt, which passes the unbounded spinCount to convertPasswdToKey before password verification. When a crafted OLE encrypted-workbook header supplies an excessive spinCount and the file is opened, the key-derivation loop performs unbounded attacker-selected work and cannot be cancelled, allowing an attacker to consume a CPU core for an attacker-controlled duration. No fixed version is available as of this review.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.3.1 to 2.11.0, agile decryption accepts an attacker-controlled spinCount and performs that many password-key derivation iterations before verifier validation. OpenFile reaches agileDecrypt, which passes the unbounded spinCount to convertPasswdToKey before password verification. When a crafted OLE encrypted-workbook header supplies an excessive spinCount and the file is opened, the key-derivation loop performs unbounded attacker-selected work and cannot be cancelled, allowing an attacker to consume a CPU core for an attacker-controlled duration. No fixed version is available as of this review.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-107219</guid>
    </item>
    <item>
      <title>GHSA-jrfj-fhj2-jjvm — Excelize: Unbounded spinCount in agile decryption burns CPU during OpenFile</title>
      <link>https://db.gcve.eu/vuln/ghsa-jrfj-fhj2-jjvm</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/xuri/excelize/v2&lt;/p&gt;
&lt;p&gt;Opening a file whose first eight bytes are the OLE magic number sends excelize down the decryption path whether or not the caller set a password, or supports encrypted workbooks at all. `openReaderAt` (excelize.go:198-215) branches on the header alone, and `agileDecrypt` calls `convertPasswdToKey` before the verifier hash is checked, so the key-derivation loop runs `spinCount` times regardless.&lt;/p&gt;
&lt;p&gt;`spinCount` (crypt.go:98) is a plain `int` filled by a bare `xml.Unmarshal` of the file&amp;#39;s own EncryptionInfo stream. Nothing bounds it.&lt;/p&gt;
&lt;p&gt;A 3072-byte file with spinCount 100000000 makes `OpenFile` take 58.65s on v2.11.0 with default options, then return `zip: not a valid zip file`. It is linear at about 0.6 microseconds per iteration and the attacker picks the number, so 1e9 is roughly ten minutes. Nothing on the path takes a `context.Context`, so the caller cannot cancel it; in an HTTP handler the write timeout returns a response while the goroutine keeps spinning. Memory stays flat at 24 MB, so nothing reclaims it either.&lt;/p&gt;
&lt;p&gt;```
v2.5.0   spinCount=10000000   5.307s
v2.9.1   spinCount=10000000   5.444s
v2.11.0  spinCount=10000000   7.529s
v2.11.0  spinCount=100000000  58.654s
```&lt;/p&gt;
&lt;p&gt;The loop arrived with `crypt.go` in v2.3.1 and is unchanged through v2.11.0.&lt;/p&gt;
&lt;p&gt;Excel and LibreOffice write spinCount 100000, which costs 61ms here, so a ceiling well above the legitimate value would cost real files nothing.&lt;/p&gt;
&lt;p&gt;This is availability only, and it is not a vulnerability for a program that only open…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/xuri/excelize/v2&lt;/p&gt;
&lt;p&gt;Opening a file whose first eight bytes are the OLE magic number sends excelize down the decryption path whether or not the caller set a password, or supports encrypted workbooks at all. `openReaderAt` (excelize.go:198-215) branches on the header alone, and `agileDecrypt` calls `convertPasswdToKey` before the verifier hash is checked, so the key-derivation loop runs `spinCount` times regardless.&lt;/p&gt;
&lt;p&gt;`spinCount` (crypt.go:98) is a plain `int` filled by a bare `xml.Unmarshal` of the file&amp;#39;s own EncryptionInfo stream. Nothing bounds it.&lt;/p&gt;
&lt;p&gt;A 3072-byte file with spinCount 100000000 makes `OpenFile` take 58.65s on v2.11.0 with default options, then return `zip: not a valid zip file`. It is linear at about 0.6 microseconds per iteration and the attacker picks the number, so 1e9 is roughly ten minutes. Nothing on the path takes a `context.Context`, so the caller cannot cancel it; in an HTTP handler the write timeout returns a response while the goroutine keeps spinning. Memory stays flat at 24 MB, so nothing reclaims it either.&lt;/p&gt;
&lt;p&gt;```
v2.5.0   spinCount=10000000   5.307s
v2.9.1   spinCount=10000000   5.444s
v2.11.0  spinCount=10000000   7.529s
v2.11.0  spinCount=100000000  58.654s
```&lt;/p&gt;
&lt;p&gt;The loop arrived with `crypt.go` in v2.3.1 and is unchanged through v2.11.0.&lt;/p&gt;
&lt;p&gt;Excel and LibreOffice write spinCount 100000, which costs 61ms here, so a ceiling well above the legitimate value would cost real files nothing.&lt;/p&gt;
&lt;p&gt;This is availability only, and it is not a vulnerability for a program that only open…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-jrfj-fhj2-jjvm</guid>
    </item>
  </channel>
</rss>
