Files
advisory-db/feed.xml
github-actions 67ed91a5b6 Update gh-pages
2026-07-03 13:44:53 +00:00

2324 lines
82 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>RustSec Advisories</title><id>https://rustsec.org/feed.xml</id><updated>2026-07-03T12:00:00+00:00</updated><author><name>RustSec</name></author><icon>https://rustsec.org/favicon.ico</icon><link href="https://rustsec.org/feed.xml" rel="self" type="application/atom+xml"/><link href="https://rustsec.org/" rel="alternate" type="text/html"/><subtitle xml:lang="en">Security advisories filed against Rust crates</subtitle><entry><title>RUSTSEC-2026-0196: cgmath is unmaintained</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0196.html</id><updated>2026-07-03T12:00:00+00:00</updated><link href="https://rustsec.org/advisories/RUSTSEC-2026-0196.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0196: cgmath is unmaintained"/><published>2026-07-03T12:00:00+00:00</published><summary xml:lang="en">`cgmath` is unmaintained</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/cgmath/RUSTSEC-2026-0196.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/cgmath/RUSTSEC-2026-0196.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0196&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0196
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;&lt;code&gt;cgmath&lt;/code&gt; is unmaintained&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-07-01&quot;&gt;
July 1, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-07-03&quot;&gt;
July 3, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/cgmath.html&quot;&gt;cgmath&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/cgmath&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unmaintained
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/rustsec/advisory-db/pull/2910#pullrequestreview-4611570365&quot;&gt;
https://github.com/rustsec/advisory-db/pull/2910#pullrequestreview-4611570365
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/rustgd/cgmath/issues/565&quot;&gt;
https://github.com/rustgd/cgmath/issues/565
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
no patched versions
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;cgmath&lt;/code&gt; crate is no longer maintained.&lt;/p&gt;
&lt;p&gt;Users should consider switching to a maintained alternative.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0197: Unsoundness in cgmath</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0197.html</id><updated>2026-07-03T12:00:00+00:00</updated><category term="memory-corruption"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0197.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0197: Unsoundness in cgmath"/><published>2026-07-03T12:00:00+00:00</published><summary xml:lang="en">`Matrix{2,3,4}::swap_columns` can trigger undefined behavior for identical indices</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/cgmath/RUSTSEC-2026-0197.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/cgmath/RUSTSEC-2026-0197.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0197&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0197
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;&lt;code&gt;Matrix{2,3,4}::swap_columns&lt;/code&gt; can trigger undefined behavior for identical indices&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-03-11&quot;&gt;
March 11, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-07-03&quot;&gt;
July 3, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/cgmath.html&quot;&gt;cgmath&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/cgmath&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unsound
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/memory-corruption.html&quot;&gt;memory-corruption&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/soundness.html&quot;&gt;#soundness&lt;/a&gt;
&lt;a href=&quot;/keywords/undefined-behavior.html&quot;&gt;#undefined-behavior&lt;/a&gt;
&lt;a href=&quot;/keywords/aliasing.html&quot;&gt;#aliasing&lt;/a&gt;
&lt;a href=&quot;/keywords/stacked-borrows.html&quot;&gt;#stacked-borrows&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/rustgd/cgmath/issues/565&quot;&gt;
https://github.com/rustgd/cgmath/issues/565
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
no patched versions
&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;Affected Functions&lt;/dt&gt;
&lt;dd&gt;Version&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;cgmath::Matrix2::swap_columns&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;=0.18.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;cgmath::Matrix3::swap_columns&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;=0.18.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;cgmath::Matrix4::swap_columns&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;=0.18.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;Matrix2::swap_columns&lt;/code&gt;, &lt;code&gt;Matrix3::swap_columns&lt;/code&gt;, and &lt;code&gt;Matrix4::swap_columns&lt;/code&gt;
implementations call &lt;code&gt;ptr::swap(&amp;amp;mut self[a], &amp;amp;mut self[b])&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;a == b&lt;/code&gt;, these safe APIs create two mutable references to the same matrix
column and pass them to &lt;code&gt;ptr::swap&lt;/code&gt;. This violates Rust&apos;s aliasing rules and can
trigger undefined behavior. The issue can be reproduced from safe Rust by calling
&lt;code&gt;swap_columns&lt;/code&gt; with identical column indices, for example &lt;code&gt;m.swap_columns(0, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A minimal fix is to return early when the two column indices are equal before
calling &lt;code&gt;ptr::swap&lt;/code&gt;.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2025-0166: Unsoundness in stackvector</title><id>https://rustsec.org/advisories/RUSTSEC-2025-0166.html</id><updated>2026-07-02T12:00:00+00:00</updated><link href="https://rustsec.org/advisories/RUSTSEC-2025-0166.html" rel="alternate" type="text/html" title="RUSTSEC-2025-0166: Unsoundness in stackvector"/><published>2026-07-02T12:00:00+00:00</published><summary xml:lang="en">Multiple soundness issues in `stackvector`</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/stackvector/RUSTSEC-2025-0166.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/stackvector/RUSTSEC-2025-0166.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2025-0166&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2025-0166
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;Multiple soundness issues in &lt;code&gt;stackvector&lt;/code&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2025-10-23&quot;&gt;
October 23, 2025
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-07-02&quot;&gt;
July 2, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/stackvector.html&quot;&gt;stackvector&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/stackvector&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unsound
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/Alexhuszagh/rust-stackvector/issues/3&quot;&gt;
https://github.com/Alexhuszagh/rust-stackvector/issues/3
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/Alexhuszagh/rust-stackvector/pull/6&quot;&gt;
https://github.com/Alexhuszagh/rust-stackvector/pull/6
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/Alexhuszagh/rust-stackvector/commit/02b947afdeeb1be95ec0888354aa76afdd9d0357&quot;&gt;
https://github.com/Alexhuszagh/rust-stackvector/commit/02b947afdeeb1be95ec0888354aa76afdd9d0357
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/Alexhuszagh/rust-stackvector/issues/5&quot;&gt;
https://github.com/Alexhuszagh/rust-stackvector/issues/5
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=2.0.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;Affected versions of &lt;code&gt;stackvector&lt;/code&gt; contained multiple soundness issues that could allow safe Rust code to trigger undefined behavior.&lt;/p&gt;
&lt;p&gt;One issue was that &lt;code&gt;StackVec::length&lt;/code&gt; was exposed as a public field. Safe Rust code could set &lt;code&gt;length&lt;/code&gt; to a value larger than the backing array capacity. Other safe methods, including &lt;code&gt;remove&lt;/code&gt;, &lt;code&gt;pop&lt;/code&gt;, and &lt;code&gt;truncate&lt;/code&gt;, relied on &lt;code&gt;length&lt;/code&gt; before performing unsafe pointer operations (&lt;code&gt;ptr::read&lt;/code&gt;, &lt;code&gt;ptr::copy&lt;/code&gt;, &lt;code&gt;offset&lt;/code&gt;/&lt;code&gt;add&lt;/code&gt;). If &lt;code&gt;length&lt;/code&gt; was corrupted by safe code, these methods could perform out-of-bounds pointer arithmetic, reads, writes, or copies.&lt;/p&gt;
&lt;p&gt;The upstream maintainer also identified additional soundness issues, including the use of &lt;code&gt;mem::uninitialized&lt;/code&gt; in &lt;code&gt;StackVec::from_vec_unchecked&lt;/code&gt;, which was reachable through &lt;code&gt;from_vec&lt;/code&gt;, and Miri violations related to &lt;code&gt;MaybeUninit&lt;/code&gt; usage.&lt;/p&gt;
&lt;p&gt;Version &lt;code&gt;2.0.0&lt;/code&gt; was released to fix the known soundness issues.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0194: Vulnerability in quick-xml</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0194.html</id><updated>2026-07-02T12:00:00+00:00</updated><category term="denial-of-service"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0194.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0194: Vulnerability in quick-xml"/><published>2026-07-02T12:00:00+00:00</published><summary xml:lang="en">Quadratic run time when checking a start tag for duplicate attribute names</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/quick-xml/RUSTSEC-2026-0194.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/quick-xml/RUSTSEC-2026-0194.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0194&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0194
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;Quadratic run time when checking a start tag for duplicate attribute names&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-07-02&quot;&gt;
July 2, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/quick-xml.html&quot;&gt;quick-xml&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/quick-xml&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
Vulnerability
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/denial-of-service.html&quot;&gt;denial-of-service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/xml.html&quot;&gt;#xml&lt;/a&gt;
&lt;a href=&quot;/keywords/parser.html&quot;&gt;#parser&lt;/a&gt;
&lt;a href=&quot;/keywords/dos.html&quot;&gt;#dos&lt;/a&gt;
&lt;a href=&quot;/keywords/algorithmic-complexity.html&quot;&gt;#algorithmic-complexity&lt;/a&gt;
&lt;a href=&quot;/keywords/quadratic.html&quot;&gt;#quadratic&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/tafia/quick-xml/issues/969&quot;&gt;
https://github.com/tafia/quick-xml/issues/969
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/tafia/quick-xml/pull/971&quot;&gt;
https://github.com/tafia/quick-xml/pull/971
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/tafia/quick-xml/commit/07f3db8343cf152f5bc3483ef5b3164582489bea&quot;&gt;
https://github.com/tafia/quick-xml/commit/07f3db8343cf152f5bc3483ef5b3164582489bea
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss_score&quot;&gt;CVSS Score&lt;/dt&gt;
&lt;dd&gt;7.5 &lt;span class=&quot;tag high&quot;&gt;
HIGH
&lt;/span&gt;&lt;/dd&gt;
&lt;dt id=&quot;cvss_details&quot;&gt;CVSS Details&lt;/dt&gt;
&lt;dd&gt;
&lt;dl&gt;
&lt;dt&gt;Attack Vector&lt;/dt&gt;
&lt;dd&gt;Network&lt;/dd&gt;
&lt;dt&gt;Attack Complexity&lt;/dt&gt;
&lt;dd&gt;Low&lt;/dd&gt;
&lt;dt&gt;Privileges Required&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;User Interaction&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Scope&lt;/dt&gt;
&lt;dd&gt;Unchanged&lt;/dd&gt;
&lt;dt&gt;Confidentiality Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Integrity Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Availability Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;/dl&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss&quot;&gt;CVSS Vector&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&quot;https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H&lt;/a&gt;&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=0.41.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;BytesStart::attributes()&lt;/code&gt; returns an &lt;code&gt;Attributes&lt;/code&gt; iterator which, by default
(&lt;code&gt;with_checks(true)&lt;/code&gt;), rejects a start tag that repeats an attribute name. For
each attribute yielded, the iterator compared the new name against every name
seen so far in the same tag using a linear scan, so a start tag with &lt;code&gt;N&lt;/code&gt;
distinct attribute names cost &lt;code&gt;O(N²)&lt;/code&gt; byte comparisons. There was no bound on
&lt;code&gt;N&lt;/code&gt; other than the size of the buffered start tag.&lt;/p&gt;
&lt;h2&gt;Impact&lt;/h2&gt;
&lt;p&gt;Any code that parses untrusted XML and iterates a start tag&apos;s attributes with
the default duplicate check enabled can be made to spend CPU time quadratic in
the number of attributes on a single tag. Because the check is pure computation
with no &lt;code&gt;.await&lt;/code&gt;/I/O, an I/O-based timeout on the consumer (for example a read
or request timeout) cannot interrupt it while it runs.&lt;/p&gt;
&lt;p&gt;Measured cost of a single start tag, release build:&lt;/p&gt;
&lt;p&gt;| Attributes on one tag | Time |
|---|---|
| 80,000 | ~6 s |
| 800,000 | ~10 min |&lt;/p&gt;
&lt;p&gt;The cost grows with the square of the attribute count, so a start tag of a few
tens of megabytes can stall a parsing thread for hours. No memory is exhausted
and the parser does not crash; the effect is CPU exhaustion on the thread doing
the parsing: a single crafted start tag can pin a CPU core for minutes to hours,
denying service to that worker. A deployment that places a wall-clock bound on
parsing, or confines it to a non-critical thread, may consider the availability
impact lower.&lt;/p&gt;
&lt;h2&gt;Affected code paths&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BytesStart::attributes()&lt;/code&gt; / &lt;code&gt;Attributes&lt;/code&gt; iterated with checks enabled (the
default), and &lt;code&gt;BytesStart::try_get_attribute&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NsReader&lt;/code&gt;, which resolves namespaces by iterating a tag&apos;s attributes and so
reaches the same check internally.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consumers that iterate attributes with &lt;code&gt;.attributes().with_checks(false)&lt;/code&gt; and do
not use &lt;code&gt;NsReader&lt;/code&gt; are not affected.&lt;/p&gt;
&lt;p&gt;This was reported as reachable by a remote, unauthenticated attacker in a
real-world RPKI relying party (NLnet Labs Routinator) via a crafted RRDP
&lt;code&gt;snapshot.xml&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Remediation&lt;/h2&gt;
&lt;p&gt;Upgrade to &lt;code&gt;quick-xml &amp;gt;= 0.41.0&lt;/code&gt;, where the duplicate check keeps the linear
scan for start tags with a small number of attributes and switches to an &lt;code&gt;O(1)&lt;/code&gt;
hash pre-filter above a threshold, making the whole tag &lt;code&gt;O(N)&lt;/code&gt;. The reported
&lt;code&gt;AttrError::Duplicated&lt;/code&gt; positions are unchanged.&lt;/p&gt;
&lt;p&gt;If upgrading is not possible and duplicate-name detection is not required,
disable it with &lt;code&gt;.attributes().with_checks(false)&lt;/code&gt; (this does not help
&lt;code&gt;NsReader&lt;/code&gt; consumers, which have no equivalent opt-out before 0.41.0).&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0195: Vulnerability in quick-xml</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0195.html</id><updated>2026-07-02T12:00:00+00:00</updated><category term="denial-of-service"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0195.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0195: Vulnerability in quick-xml"/><published>2026-07-02T12:00:00+00:00</published><summary xml:lang="en">Unbounded namespace-declaration allocation in `NsReader` enables memory-exhaustion denial of service</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/quick-xml/RUSTSEC-2026-0195.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/quick-xml/RUSTSEC-2026-0195.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0195&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0195
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;Unbounded namespace-declaration allocation in &lt;code&gt;NsReader&lt;/code&gt; enables memory-exhaustion denial of service&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-07-02&quot;&gt;
July 2, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/quick-xml.html&quot;&gt;quick-xml&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/quick-xml&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
Vulnerability
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/denial-of-service.html&quot;&gt;denial-of-service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/xml.html&quot;&gt;#xml&lt;/a&gt;
&lt;a href=&quot;/keywords/parser.html&quot;&gt;#parser&lt;/a&gt;
&lt;a href=&quot;/keywords/dos.html&quot;&gt;#dos&lt;/a&gt;
&lt;a href=&quot;/keywords/memory.html&quot;&gt;#memory&lt;/a&gt;
&lt;a href=&quot;/keywords/namespace.html&quot;&gt;#namespace&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/tafia/quick-xml/issues/970&quot;&gt;
https://github.com/tafia/quick-xml/issues/970
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/tafia/quick-xml/commit/7ca25266e94987210daa864889ab15c9332c8a2a&quot;&gt;
https://github.com/tafia/quick-xml/commit/7ca25266e94987210daa864889ab15c9332c8a2a
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss_score&quot;&gt;CVSS Score&lt;/dt&gt;
&lt;dd&gt;7.5 &lt;span class=&quot;tag high&quot;&gt;
HIGH
&lt;/span&gt;&lt;/dd&gt;
&lt;dt id=&quot;cvss_details&quot;&gt;CVSS Details&lt;/dt&gt;
&lt;dd&gt;
&lt;dl&gt;
&lt;dt&gt;Attack Vector&lt;/dt&gt;
&lt;dd&gt;Network&lt;/dd&gt;
&lt;dt&gt;Attack Complexity&lt;/dt&gt;
&lt;dd&gt;Low&lt;/dd&gt;
&lt;dt&gt;Privileges Required&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;User Interaction&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Scope&lt;/dt&gt;
&lt;dd&gt;Unchanged&lt;/dd&gt;
&lt;dt&gt;Confidentiality Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Integrity Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Availability Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;/dl&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss&quot;&gt;CVSS Vector&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&quot;https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H&lt;/a&gt;&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=0.41.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;NsReader&lt;/code&gt; resolves namespaces by calling &lt;code&gt;NamespaceResolver::push&lt;/code&gt; for every
&lt;code&gt;Start&lt;/code&gt;/&lt;code&gt;Empty&lt;/code&gt; event &lt;em&gt;before&lt;/em&gt; the event is returned to the caller. &lt;code&gt;push&lt;/code&gt;
iterated all &lt;code&gt;xmlns&lt;/code&gt; / &lt;code&gt;xmlns:*&lt;/code&gt; attributes on the start tag and, for each one,
appended the prefix bytes to an internal buffer and pushed a &lt;code&gt;NamespaceBinding&lt;/code&gt;
(32 bytes on 64-bit) to an internal &lt;code&gt;Vec&lt;/code&gt;, with no upper bound on the number of
declarations.&lt;/p&gt;
&lt;h2&gt;Impact&lt;/h2&gt;
&lt;p&gt;A start tag with &lt;code&gt;N&lt;/code&gt; namespace declarations drove roughly &lt;code&gt;3×&lt;/code&gt; the tag&apos;s byte
size in &lt;code&gt;NamespaceResolver&lt;/code&gt; heap, allocated &lt;em&gt;inside&lt;/em&gt; &lt;code&gt;quick-xml&lt;/code&gt; before the
&lt;code&gt;NsReader&lt;/code&gt; consumer ever received the event and could inspect or reject it. A
consumer that bounds its &lt;em&gt;input&lt;/em&gt; size therefore still cannot bound this
allocation: an &lt;code&gt;M&lt;/code&gt;-byte start tag yields on the order of &lt;code&gt;3 × M&lt;/code&gt; bytes of
resolver heap the caller never sees.&lt;/p&gt;
&lt;p&gt;On untrusted XML this lets a remote, unauthenticated attacker force large heap
allocations with a single start tag. With several &lt;code&gt;NsReader&lt;/code&gt;s running
concurrently on independent inputs (a common server pattern), the allocations
stack and can exhaust process memory, causing the operating system to kill the
process (OOM). This was confirmed against a real-world RPKI relying party (NLnet
Labs Routinator), where concurrent RRDP validation workers parsing a crafted
&lt;code&gt;snapshot.xml&lt;/code&gt; exceeded the memory limit and the process was OOM-killed.&lt;/p&gt;
&lt;h2&gt;Affected code paths&lt;/h2&gt;
&lt;p&gt;Consumers using &lt;code&gt;NsReader&lt;/code&gt; (which always calls &lt;code&gt;NamespaceResolver::push&lt;/code&gt; before
yielding &lt;code&gt;Start&lt;/code&gt;/&lt;code&gt;Empty&lt;/code&gt;), or calling &lt;code&gt;NamespaceResolver::push&lt;/code&gt; directly. A plain
&lt;code&gt;Reader&lt;/code&gt; that does not perform namespace resolution is not affected.&lt;/p&gt;
&lt;h2&gt;Remediation&lt;/h2&gt;
&lt;p&gt;Upgrade to &lt;code&gt;quick-xml &amp;gt;= 0.41.0&lt;/code&gt;. &lt;code&gt;NamespaceResolver::push&lt;/code&gt; now rejects a start
tag that declares more than &lt;code&gt;DEFAULT_MAX_DECLARATIONS_PER_ELEMENT&lt;/code&gt; (256)
namespace bindings, returning the new &lt;code&gt;NamespaceError::TooManyDeclarations&lt;/code&gt;
instead of allocating without limit. The limit is configurable via
&lt;code&gt;NamespaceResolver::set_max_declarations_per_element&lt;/code&gt; (use &lt;code&gt;usize::MAX&lt;/code&gt; to
restore the previous unbounded behavior), and &lt;code&gt;NsReader::resolver_mut()&lt;/code&gt; is
provided to reach it.&lt;/p&gt;
&lt;p&gt;There is no clean workaround for &lt;code&gt;NsReader&lt;/code&gt; consumers before 0.41.0, as the
allocation happens inside the reader with no configuration knob to cap it.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0193: Vulnerability in ammonia</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0193.html</id><updated>2026-07-01T12:00:00+00:00</updated><category term="format-injection"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0193.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0193: Vulnerability in ammonia"/><published>2026-06-30T12:00:00+00:00</published><summary xml:lang="en">mXSS in ammonia via MathML `annotation-xml` encoding strip</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/ammonia/RUSTSEC-2026-0193.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/ammonia/RUSTSEC-2026-0193.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0193&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0193
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;mXSS in ammonia via MathML &lt;code&gt;annotation-xml&lt;/code&gt; encoding strip&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-30&quot;&gt;
June 30, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-30&quot;&gt;
June 30, 2026
&lt;/time&gt;
&lt;time datetime=&quot;2026-07-01&quot;&gt;
(last modified: July 1, 2026)
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/ammonia.html&quot;&gt;ammonia&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/ammonia&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
Vulnerability
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/format-injection.html&quot;&gt;format-injection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/html.html&quot;&gt;#html&lt;/a&gt;
&lt;a href=&quot;/keywords/xss.html&quot;&gt;#xss&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;aliases&quot;&gt;Aliases&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-9jh8-v38h-cvhr&quot;&gt;GHSA-9jh8-v38h-cvhr&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=4.1.3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=4.0.2, &amp;#60;4.1.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=3.3.2, &amp;#60;4.0.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;If a certain set of MathML tags are enabled, an attacker can inject arbitrary JavaScript code into the user&apos;s browser.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;annotation-xml&lt;/code&gt; tag has slightly different behavior than the other &amp;quot;integration point&amp;quot;
tags in MathML and SVG, but ammonia didn&apos;t handle it, so it didn&apos;t correctly
strip the namespace-incompatible tags.&lt;/p&gt;
&lt;p&gt;This vulnerability only has an effect when the &lt;code&gt;math&lt;/code&gt; and &lt;code&gt;annotation-xml&lt;/code&gt; tags
are both enabled, but the &lt;code&gt;encoding&lt;/code&gt; attribute is disabled, because it relies
on the following sequence of steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User writes code like &lt;code&gt;&amp;lt;math&amp;gt;&amp;lt;annotation-xml encoding=&amp;quot;text/html&amp;quot;&amp;gt;&amp;lt;gadget&amp;gt;&amp;lt;/annotation-xml&amp;gt;&amp;lt;/math&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Namespace filtering checks the DOM, and it passes. &lt;code&gt;&amp;lt;gadget&amp;gt;&lt;/code&gt; is parsed as HTML.&lt;/li&gt;
&lt;li&gt;Attribute filter strips it down to &lt;code&gt;&amp;lt;math&amp;gt;&amp;lt;annotation-xml&amp;gt;&amp;lt;gadget&amp;gt;&amp;lt;/annotation-xml&amp;gt;&amp;lt;/math&amp;gt;&lt;/code&gt;. Because the encoding attribute is gone, &lt;code&gt;&amp;lt;gadget&amp;gt;&lt;/code&gt; is now parsed as MathML.&lt;/li&gt;
&lt;li&gt;The gadget is written in such a way that it exploits the parsing differences between HTML and MathML.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Additionally, the gadget can only be written using a tag that is parsed as raw text in HTML.
These &lt;a href=&quot;https://github.com/servo/html5ever/blob/045a0378f2b0f8d4a350793899cf722a2a9b3d11/html5ever/src/tree_builder/rules.rs&quot;&gt;elements&lt;/a&gt; are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;textarea&lt;/li&gt;
&lt;li&gt;xmp&lt;/li&gt;
&lt;li&gt;iframe&lt;/li&gt;
&lt;li&gt;noembed&lt;/li&gt;
&lt;li&gt;noframes&lt;/li&gt;
&lt;li&gt;plaintext&lt;/li&gt;
&lt;li&gt;noscript&lt;/li&gt;
&lt;li&gt;style&lt;/li&gt;
&lt;li&gt;script&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Applications that do not explicitly allow any of these tags should not be affected, since none are allowed by default.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Discovered by:&lt;/strong&gt; ivan0912 (YesWeHack) · &lt;strong&gt;Date:&lt;/strong&gt; 2026-06-29 · Found via local differential analysis and source review of ammonia&apos;s sanitisation pipeline; no third-party systems were tested.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0192: ttf-parser is unmaintained</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0192.html</id><updated>2026-06-29T12:00:00+00:00</updated><link href="https://rustsec.org/advisories/RUSTSEC-2026-0192.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0192: ttf-parser is unmaintained"/><published>2026-06-29T12:00:00+00:00</published><summary xml:lang="en">`ttf-parser` is unmaintained</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/ttf-parser/RUSTSEC-2026-0192.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/ttf-parser/RUSTSEC-2026-0192.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0192&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0192
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;&lt;code&gt;ttf-parser&lt;/code&gt; is unmaintained&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-28&quot;&gt;
June 28, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/ttf-parser.html&quot;&gt;ttf-parser&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/ttf-parser&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unmaintained
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/harfbuzz/ttf-parser/issues/217&quot;&gt;
https://github.com/harfbuzz/ttf-parser/issues/217
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
no patched versions
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;The author of &lt;code&gt;ttf-parser&lt;/code&gt; has stated that the crate is unmaintained and will not receive further fixes (see the referenced issue).&lt;/p&gt;
&lt;h2&gt;Alternative(s)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://crates.io/crates/skrifa&quot;&gt;&lt;code&gt;skrifa&lt;/code&gt;&lt;/a&gt;, an actively maintained TrueType and OpenType font parsing crate, part of the Google Fonts &amp;quot;oxidize&amp;quot; (&lt;code&gt;fontations&lt;/code&gt;) project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0188: Vulnerability in wasmtime-wasi</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0188.html</id><updated>2026-06-29T12:00:00+00:00</updated><link href="https://rustsec.org/advisories/RUSTSEC-2026-0188.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0188: Vulnerability in wasmtime-wasi"/><published>2026-06-29T12:00:00+00:00</published><summary xml:lang="en">WASI hard links and renames bypass wasmtime-wasi&amp;apos;s FilePerms for destination</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/wasmtime-wasi/RUSTSEC-2026-0188.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/wasmtime-wasi/RUSTSEC-2026-0188.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0188&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0188
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;WASI hard links and renames bypass wasmtime-wasi&apos;s FilePerms for destination&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-24&quot;&gt;
June 24, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/wasmtime-wasi.html&quot;&gt;wasmtime-wasi&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/wasmtime-wasi&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
Vulnerability
&lt;/dd&gt;
&lt;dt id=&quot;aliases&quot;&gt;Aliases&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-4ch3-9j33-3pmj&quot;&gt;GHSA-4ch3-9j33-3pmj&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-4ch3-9j33-3pmj&quot;&gt;
https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-4ch3-9j33-3pmj
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss_score&quot;&gt;CVSS Score&lt;/dt&gt;
&lt;dd&gt;6.5 &lt;span class=&quot;tag medium&quot;&gt;
MEDIUM
&lt;/span&gt;&lt;/dd&gt;
&lt;dt id=&quot;cvss_details&quot;&gt;CVSS Details&lt;/dt&gt;
&lt;dd&gt;
&lt;dl&gt;
&lt;dt&gt;Attack Vector&lt;/dt&gt;
&lt;dd&gt;Local&lt;/dd&gt;
&lt;dt&gt;Attack Complexity&lt;/dt&gt;
&lt;dd&gt;Low&lt;/dd&gt;
&lt;dt&gt;Privileges Required&lt;/dt&gt;
&lt;dd&gt;Low&lt;/dd&gt;
&lt;dt&gt;User Interaction&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Scope&lt;/dt&gt;
&lt;dd&gt;Changed&lt;/dd&gt;
&lt;dt&gt;Confidentiality Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Integrity Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;dt&gt;Availability Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;/dl&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss&quot;&gt;CVSS Vector&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&quot;https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N&quot;&gt;CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N&lt;/a&gt;&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=46.0.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=45.0.3, &amp;#60;46.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=36.0.12, &amp;#60;37.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=24.0.11, &amp;#60;25.0.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;This is an entry in the RustSec database for the Wasmtime security advisory
located at
https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-4ch3-9j33-3pmj
For more information see the GitHub-hosted security advisory.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0189: Vulnerability in rmcp</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0189.html</id><updated>2026-06-30T12:00:00+00:00</updated><link href="https://rustsec.org/advisories/RUSTSEC-2026-0189.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0189: Vulnerability in rmcp"/><published>2026-06-29T12:00:00+00:00</published><summary xml:lang="en">DNS rebinding vulnerability in rmcp Streamable HTTP server transport</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/rmcp/RUSTSEC-2026-0189.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/rmcp/RUSTSEC-2026-0189.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0189&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0189
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;DNS rebinding vulnerability in rmcp Streamable HTTP server transport&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-04-29&quot;&gt;
April 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;time datetime=&quot;2026-06-30&quot;&gt;
(last modified: June 30, 2026)
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/rmcp.html&quot;&gt;rmcp&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/rmcp&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
Vulnerability
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/dns-rebinding.html&quot;&gt;#dns-rebinding&lt;/a&gt;
&lt;a href=&quot;/keywords/mcp.html&quot;&gt;#mcp&lt;/a&gt;
&lt;a href=&quot;/keywords/http.html&quot;&gt;#http&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;aliases&quot;&gt;Aliases&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-42559&quot;&gt;CVE-2026-42559&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-89vp-x53w-74fx&quot;&gt;GHSA-89vp-x53w-74fx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-fvh2-gm75-j4j7&quot;&gt;GHSA-fvh2-gm75-j4j7&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/modelcontextprotocol/rust-sdk/security/advisories/GHSA-89vp-x53w-74fx&quot;&gt;
https://github.com/modelcontextprotocol/rust-sdk/security/advisories/GHSA-89vp-x53w-74fx
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/modelcontextprotocol/rust-sdk/pull/764&quot;&gt;
https://github.com/modelcontextprotocol/rust-sdk/pull/764
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/modelcontextprotocol/rust-sdk/issues/815&quot;&gt;
https://github.com/modelcontextprotocol/rust-sdk/issues/815
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/modelcontextprotocol/rust-sdk/issues/822&quot;&gt;
https://github.com/modelcontextprotocol/rust-sdk/issues/822
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#security-warning&quot;&gt;
https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#security-warning
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;related&quot;&gt;Related&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/advisories/GHSA-fvh2-gm75-j4j7&quot;&gt;GHSA-fvh2-gm75-j4j7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://rustsec.org/advisories/RUSTSEC-2026-0140&quot;&gt;RUSTSEC-2026-0140&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss_score&quot;&gt;CVSS Score&lt;/dt&gt;
&lt;dd&gt;8.8 &lt;span class=&quot;tag high&quot;&gt;
HIGH
&lt;/span&gt;&lt;/dd&gt;
&lt;dt id=&quot;cvss_details&quot;&gt;CVSS Details&lt;/dt&gt;
&lt;dd&gt;
&lt;dl&gt;
&lt;dt&gt;Attack Vector&lt;/dt&gt;
&lt;dd&gt;Network&lt;/dd&gt;
&lt;dt&gt;Attack Complexity&lt;/dt&gt;
&lt;dd&gt;Low&lt;/dd&gt;
&lt;dt&gt;Privileges Required&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;User Interaction&lt;/dt&gt;
&lt;dd&gt;Required&lt;/dd&gt;
&lt;dt&gt;Scope&lt;/dt&gt;
&lt;dd&gt;Unchanged&lt;/dd&gt;
&lt;dt&gt;Confidentiality Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;dt&gt;Integrity Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;dt&gt;Availability Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;/dl&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss&quot;&gt;CVSS Vector&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&quot;https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H&lt;/a&gt;&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=1.4.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;Prior to version 1.4.0, the &lt;code&gt;rmcp&lt;/code&gt; crate&apos;s Streamable HTTP server transport did
not validate the incoming &lt;code&gt;Host&lt;/code&gt; header.&lt;/p&gt;
&lt;p&gt;This allowed a malicious public website, via a DNS rebinding attack, to send
requests to an MCP server running on the victim&apos;s loopback or private-network
interface.&lt;/p&gt;
&lt;p&gt;An attacker who convinced a victim to visit a malicious page could enumerate and
invoke tools exposed by a locally running rmcp-based MCP server, read resources
and prompts, and trigger side effects limited by the tools exposed by that
server.&lt;/p&gt;
&lt;p&gt;Non-HTTP transports such as stdio and child-process transports are not affected.&lt;/p&gt;
&lt;h2&gt;Patches&lt;/h2&gt;
&lt;p&gt;The issue was fixed in &lt;code&gt;rmcp&lt;/code&gt; 1.4.0 by adding default loopback-only host
allowlist validation for the Streamable HTTP server transport. Incoming HTTP
requests now validate the &lt;code&gt;Host&lt;/code&gt; header and return HTTP 403 when the host is not
allowed.&lt;/p&gt;
&lt;p&gt;Users should upgrade to &lt;code&gt;rmcp &amp;gt;= 1.4.0&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Workarounds&lt;/h2&gt;
&lt;p&gt;If upgrading is not possible, place the MCP server behind a reverse proxy
configured to reject requests whose &lt;code&gt;Host&lt;/code&gt; header is not one of the expected
hostnames. Do not bind the MCP server to &lt;code&gt;0.0.0.0&lt;/code&gt; without such validation.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0190: Unsoundness in anyhow</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0190.html</id><updated>2026-06-29T12:00:00+00:00</updated><category term="memory-corruption"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0190.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0190: Unsoundness in anyhow"/><published>2026-06-29T12:00:00+00:00</published><summary xml:lang="en">Unsoundness in `Error::downcast_mut()`</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/anyhow/RUSTSEC-2026-0190.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/anyhow/RUSTSEC-2026-0190.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0190&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0190
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;Unsoundness in &lt;code&gt;Error::downcast_mut()&lt;/code&gt;&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-25&quot;&gt;
June 25, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/anyhow.html&quot;&gt;anyhow&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/anyhow&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unsound
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/memory-corruption.html&quot;&gt;memory-corruption&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/unsound.html&quot;&gt;#unsound&lt;/a&gt;
&lt;a href=&quot;/keywords/downcast_mut.html&quot;&gt;#downcast_mut&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/dtolnay/anyhow/issues/451&quot;&gt;
https://github.com/dtolnay/anyhow/issues/451
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=1.0.103&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;Affected Functions&lt;/dt&gt;
&lt;dd&gt;Version&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;anyhow::Error::downcast_mut&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#60;1.0.103&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;Affected versions of this crate violate borrow rules, resulting in undefined behavior, when the user adds context to an error via &lt;code&gt;Error::context&lt;/code&gt; and then later calls &lt;code&gt;Error::downcast_mut&lt;/code&gt; on the returned &lt;code&gt;Error&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The flaw was corrected in commit &lt;code&gt;6e8c000&lt;/code&gt; by revising how the mutable reference is constructed, avoiding inclusion of a shared reference in the resulting borrow chain.&lt;/p&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;use anyhow::Error;
use std::fmt;
#[derive(Debug)]
struct ErrorContext(&amp;amp;&apos;static str);
impl fmt::Display for ErrorContext {
fn fmt(&amp;amp;self, f: &amp;amp;mut fmt::Formatter&amp;lt;&apos;_&amp;gt;) -&amp;gt; fmt::Result {
fmt::Display::fmt(&amp;amp;self.0, f)
}
}
fn main() {
let mut error = Error::msg(&amp;quot;inner error&amp;quot;).context(ErrorContext(&amp;quot;old context&amp;quot;));
let context: &amp;amp;mut ErrorContext = error.downcast_mut().unwrap();
context.0 = &amp;quot;new context&amp;quot;;
println!(&amp;quot;{:?}&amp;quot;, error);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Miri output&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;error: Undefined Behavior: trying to retag from &amp;lt;1538&amp;gt; for Unique permission at alloc602[0x38], but that tag only grants SharedReadOnly permission for this location
--&amp;gt; src/ptr.rs:170:18
|
170 | unsafe { &amp;amp;mut *self.ptr.as_ptr() }
| ^^^^^^^^^^^^^^^^^^^^^^^ this error occurs as part of retag at alloc602[0x38..0x48]
|
= help: this indicates a potential bug in the program: it performed an invalid operation, but the Stacked Borrows rules it violated are still experimental
= help: see https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/stacked-borrows.md for further information
help: &amp;lt;1538&amp;gt; was created by a SharedReadOnly retag at offsets [0x38..0x48]
--&amp;gt; src/ptr.rs:89:18
|
89 | ptr: NonNull::from(ptr),
| ^^^^^^^^^^^^^^^^^^
= note: stack backtrace:
0: anyhow::ptr::Mut::&amp;lt;&apos;_, ErrorContext&amp;gt;::deref_mut
at src/ptr.rs:170:18: 170:41
1: anyhow::error::&amp;lt;impl anyhow::Error&amp;gt;::downcast_mut::&amp;lt;ErrorContext&amp;gt;
at src/error.rs:560:18: 560:46
2: main
at examples/downcast_mut.rs:15:38: 15:58
&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2025-0165: Unsoundness in i_tree</title><id>https://rustsec.org/advisories/RUSTSEC-2025-0165.html</id><updated>2026-06-29T12:00:00+00:00</updated><link href="https://rustsec.org/advisories/RUSTSEC-2025-0165.html" rel="alternate" type="text/html" title="RUSTSEC-2025-0165: Unsoundness in i_tree"/><published>2026-06-29T12:00:00+00:00</published><summary xml:lang="en">i_tree allowed out-of-bounds access through safe public node accessors</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/i_tree/RUSTSEC-2025-0165.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/i_tree/RUSTSEC-2025-0165.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2025-0165&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2025-0165
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;i_tree allowed out-of-bounds access through safe public node accessors&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2025-07-04&quot;&gt;
July 4, 2025
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/i_tree.html&quot;&gt;i_tree&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/i_tree&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unsound
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/iShape-Rust/iTree/issues/1&quot;&gt;
https://github.com/iShape-Rust/iTree/issues/1
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/iShape-Rust/iTree/commit/a948b891cf159233bfed5b16bf185268fd9e1985&quot;&gt;
https://github.com/iShape-Rust/iTree/commit/a948b891cf159233bfed5b16bf185268fd9e1985
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/iShape-Rust/iTree/compare/0.9.0...0.10.0&quot;&gt;
https://github.com/iShape-Rust/iTree/compare/0.9.0...0.10.0
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=0.10.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;Affected Functions&lt;/dt&gt;
&lt;dd&gt;Version&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;i_tree::tree::Tree::mut_node&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#60;0.10.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;i_tree::tree::Tree::node&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#60;0.10.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;Affected versions of &lt;code&gt;i_tree&lt;/code&gt; exposed safe public &lt;code&gt;Tree::node&lt;/code&gt; and &lt;code&gt;Tree::mut_node&lt;/code&gt; methods in the public &lt;code&gt;tree&lt;/code&gt; module. These methods accepted an arbitrary &lt;code&gt;u32&lt;/code&gt; index and passed it directly to &lt;code&gt;Vec::get_unchecked&lt;/code&gt; / &lt;code&gt;get_unchecked_mut&lt;/code&gt; on the internal node buffer, without validating that the index was in bounds.&lt;/p&gt;
&lt;p&gt;Because these methods were safe and public, a caller could pass an out-of-bounds index without writing any &lt;code&gt;unsafe&lt;/code&gt; code, producing an out-of-bounds shared or mutable reference and triggering undefined behavior.&lt;/p&gt;
&lt;p&gt;Starting with &lt;code&gt;0.10.0&lt;/code&gt; the crate was restructured and these accessors are no longer reachable from outside the crate.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0191: Unsoundness in solana_rbpf</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0191.html</id><updated>2026-06-29T12:00:00+00:00</updated><category term="memory-corruption"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0191.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0191: Unsoundness in solana_rbpf"/><published>2026-06-29T12:00:00+00:00</published><summary xml:lang="en">`EbpfVm::invoke_function` performs out-of-bounds pointer arithmetic</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/solana_rbpf/RUSTSEC-2026-0191.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/solana_rbpf/RUSTSEC-2026-0191.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0191&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0191
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;&lt;code&gt;EbpfVm::invoke_function&lt;/code&gt; performs out-of-bounds pointer arithmetic&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-05-28&quot;&gt;
May 28, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-29&quot;&gt;
June 29, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/solana_rbpf.html&quot;&gt;solana_rbpf&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/solana_rbpf&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
&lt;span class=&quot;tag info&quot;&gt;INFO&lt;/span&gt;
Unsound
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/memory-corruption.html&quot;&gt;memory-corruption&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/soundness.html&quot;&gt;#soundness&lt;/a&gt;
&lt;a href=&quot;/keywords/pointer-arithmetic.html&quot;&gt;#pointer-arithmetic&lt;/a&gt;
&lt;a href=&quot;/keywords/out-of-bounds.html&quot;&gt;#out-of-bounds&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/solana-labs/rbpf&quot;&gt;
https://github.com/solana-labs/rbpf
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/anza-xyz/sbpf/pull/151&quot;&gt;
https://github.com/anza-xyz/sbpf/pull/151
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://crates.io/crates/solana-sbpf&quot;&gt;
https://crates.io/crates/solana-sbpf
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
no patched versions
&lt;/dd&gt;
&lt;dt id=&quot;unaffected&quot;&gt;Unaffected&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#60;0.8.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;Affected Functions&lt;/dt&gt;
&lt;dd&gt;Version&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;solana_rbpf::vm::EbpfVm::invoke_function&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=0.8.0, &amp;#60;=0.8.5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;Affected versions of &lt;code&gt;solana_rbpf&lt;/code&gt; expose the safe method
&lt;code&gt;EbpfVm::invoke_function&lt;/code&gt;. This method computes an obfuscated VM pointer by
casting &lt;code&gt;self&lt;/code&gt; to &lt;code&gt;*mut u64&lt;/code&gt; and applying a randomized offset derived from
&lt;code&gt;get_runtime_environment_key()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The resulting pointer arithmetic is performed with &lt;code&gt;ptr::offset&lt;/code&gt;, which
requires the computed pointer to remain within the same allocation. In practice,
the randomized offset can move the pointer far outside the allocation
containing the &lt;code&gt;EbpfVm&lt;/code&gt;, causing undefined behavior before the supplied builtin
function is invoked.&lt;/p&gt;
&lt;h2&gt;Unmaintained&lt;/h2&gt;
&lt;p&gt;The upstream &lt;code&gt;solana_rbpf&lt;/code&gt; repository is archived, and no patched version of
this crate is currently available.&lt;/p&gt;
&lt;p&gt;Users should migrate to the maintained &lt;a href=&quot;https://crates.io/crates/solana-sbpf&quot;&gt;&lt;code&gt;solana-sbpf&lt;/code&gt;&lt;/a&gt;
crate. The issue has been fixed there in
&lt;a href=&quot;https://github.com/anza-xyz/sbpf/pull/151&quot;&gt;&lt;code&gt;anza-xyz/sbpf#151&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry><entry><title>RUSTSEC-2026-0187: Vulnerability in lopdf</title><id>https://rustsec.org/advisories/RUSTSEC-2026-0187.html</id><updated>2026-06-26T12:00:00+00:00</updated><category term="denial-of-service"/><link href="https://rustsec.org/advisories/RUSTSEC-2026-0187.html" rel="alternate" type="text/html" title="RUSTSEC-2026-0187: Vulnerability in lopdf"/><published>2026-06-26T12:00:00+00:00</published><summary xml:lang="en">Stack overflow in lopdf via deeply nested PDF objects</summary><content xml:lang="en" type="html"> &lt;article&gt;
&lt;span class=&quot;floating-menu&quot;&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/commits/main/crates/lopdf/RUSTSEC-2026-0187.md&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;https://github.com/RustSec/advisory-db/edit/main/crates/lopdf/RUSTSEC-2026-0187.md&quot;&gt;Edit&lt;/a&gt;
&lt;a href=&quot;https://api.osv.dev/v1/vulns/RUSTSEC-2026-0187&quot;&gt;JSON (OSV)&lt;/a&gt;
&lt;/span&gt;
&lt;header&gt;
&lt;h1&gt;
RUSTSEC-2026-0187
&lt;/h1&gt;
&lt;span class=&quot;subtitle&quot;&gt;&lt;p&gt;Stack overflow in lopdf via deeply nested PDF objects&lt;/p&gt;
&lt;/span&gt;
&lt;/header&gt;
&lt;dl&gt;
&lt;dt id=&quot;reported&quot;&gt;Reported&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-21&quot;&gt;
June 21, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;issued&quot;&gt;Issued&lt;/dt&gt;
&lt;dd&gt;
&lt;time datetime=&quot;2026-06-26&quot;&gt;
June 26, 2026
&lt;/time&gt;
&lt;/dd&gt;
&lt;dt id=&quot;package&quot;&gt;Package&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/packages/lopdf.html&quot;&gt;lopdf&lt;/a&gt;
(&lt;a href=&quot;https://crates.io/crates/lopdf&quot;&gt;crates.io&lt;/a&gt;)
&lt;/dd&gt;
&lt;dt id=&quot;type&quot;&gt;Type&lt;/dt&gt;
&lt;dd&gt;
Vulnerability
&lt;/dd&gt;
&lt;dt id=&quot;categories&quot;&gt;Categories&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/categories/denial-of-service.html&quot;&gt;denial-of-service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;keywords&quot;&gt;Keywords&lt;/dt&gt;
&lt;dd&gt;
&lt;a href=&quot;/keywords/dos.html&quot;&gt;#dos&lt;/a&gt;
&lt;a href=&quot;/keywords/stack-overflow.html&quot;&gt;#stack-overflow&lt;/a&gt;
&lt;a href=&quot;/keywords/recursion.html&quot;&gt;#recursion&lt;/a&gt;
&lt;a href=&quot;/keywords/untrusted-input.html&quot;&gt;#untrusted-input&lt;/a&gt;
&lt;a href=&quot;/keywords/pdf.html&quot;&gt;#pdf&lt;/a&gt;
&lt;/dd&gt;
&lt;dt id=&quot;details&quot;&gt;References&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/J-F-Liu/lopdf/issues/502&quot;&gt;
https://github.com/J-F-Liu/lopdf/issues/502
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/J-F-Liu/lopdf/pull/503&quot;&gt;
https://github.com/J-F-Liu/lopdf/pull/503
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/J-F-Liu/lopdf/commit/c755394&quot;&gt;
https://github.com/J-F-Liu/lopdf/commit/c755394
&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss_score&quot;&gt;CVSS Score&lt;/dt&gt;
&lt;dd&gt;7.5 &lt;span class=&quot;tag high&quot;&gt;
HIGH
&lt;/span&gt;&lt;/dd&gt;
&lt;dt id=&quot;cvss_details&quot;&gt;CVSS Details&lt;/dt&gt;
&lt;dd&gt;
&lt;dl&gt;
&lt;dt&gt;Attack Vector&lt;/dt&gt;
&lt;dd&gt;Network&lt;/dd&gt;
&lt;dt&gt;Attack Complexity&lt;/dt&gt;
&lt;dd&gt;Low&lt;/dd&gt;
&lt;dt&gt;Privileges Required&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;User Interaction&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Scope&lt;/dt&gt;
&lt;dd&gt;Unchanged&lt;/dd&gt;
&lt;dt&gt;Confidentiality Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Integrity Impact&lt;/dt&gt;
&lt;dd&gt;None&lt;/dd&gt;
&lt;dt&gt;Availability Impact&lt;/dt&gt;
&lt;dd&gt;High&lt;/dd&gt;
&lt;/dl&gt;
&lt;/dd&gt;
&lt;dt id=&quot;cvss&quot;&gt;CVSS Vector&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&quot;https://www.first.org/cvss/calculator/3.1#CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H&lt;/a&gt;&lt;/dd&gt;
&lt;dt id=&quot;patched&quot;&gt;Patched&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#62;=0.42.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lopdf::Document::load_mem&lt;/code&gt; (and the other &lt;code&gt;load*&lt;/code&gt; entry points) parses nested PDF arrays and dictionaries with unbounded recursion. A small crafted PDF whose Catalog contains a deeply nested array (&lt;code&gt;/X [[[ … ]]]&lt;/code&gt;, on the order of 10,000 levels) exhausts the call stack and aborts the process with &lt;code&gt;SIGABRT&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Because this is a stack-overflow abort rather than a &lt;code&gt;panic!&lt;/code&gt;, it cannot be caught with &lt;code&gt;catch_unwind&lt;/code&gt;: any service that parses untrusted PDF input with lopdf can be crashed by a ~21 KB file, resulting in a denial of service.&lt;/p&gt;
&lt;p&gt;Confirmed on lopdf 0.41.0 and earlier; fixed in 0.42.0. Default configuration, no features changed.&lt;/p&gt;
&lt;h2&gt;Proof of concept&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
let bytes = std::fs::read(&amp;quot;poc.pdf&amp;quot;).unwrap(); // ~10,380-deep nested array in the Catalog
let _ = lopdf::Document::load_mem(&amp;amp;bytes); // stack overflow -&amp;gt; SIGABRT
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An equivalent PoC is a minimal PDF whose Catalog &lt;code&gt;/X&lt;/code&gt; value is &lt;code&gt;&amp;quot;[&amp;quot; * 10380 + &amp;quot;]&amp;quot; * 10380&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Suggested fix&lt;/h2&gt;
&lt;p&gt;Enforce a maximum object-nesting depth in the parser and return an &lt;code&gt;Err&lt;/code&gt; instead of recursing without bound.&lt;/p&gt;
&lt;p id=&quot;license&quot; class=&quot;license&quot;&gt;Advisory available under &lt;a href=&quot;https://spdx.org/licenses/CC0-1.0.html&quot;&gt;CC0-1.0&lt;/a&gt;
license.
&lt;/p&gt;
&lt;/article&gt;</content></entry></feed>