<?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://vulnerability.circl.lu</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>Sun, 11 Oct 2026 17:09:40 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-107715</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-107715</link>
      <description>&lt;p&gt;The Mechanize library is used for automating interaction with websites. Prior to 2.14.1, Mechanize sends caller-supplied credential headers to a different host after an HTTP redirect. Mechanize#request_headers= is reapplied by Mechanize::HTTP::Agent#request_add_headers even after Mechanize::HTTP::Agent#response_redirect strips per-request headers, and the protected header lists omit Proxy-Authorization and Cookie2. An attacker who controls a redirect target can capture bearer tokens or session cookies supplied through request_headers= or the per-request headers argument, while Mechanize#cookie_jar and Mechanize::HTTP::AuthStore are not affected. This issue is fixed in version 2.14.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;The Mechanize library is used for automating interaction with websites. Prior to 2.14.1, Mechanize sends caller-supplied credential headers to a different host after an HTTP redirect. Mechanize#request_headers= is reapplied by Mechanize::HTTP::Agent#request_add_headers even after Mechanize::HTTP::Agent#response_redirect strips per-request headers, and the protected header lists omit Proxy-Authorization and Cookie2. An attacker who controls a redirect target can capture bearer tokens or session cookies supplied through request_headers= or the per-request headers argument, while Mechanize#cookie_jar and Mechanize::HTTP::AuthStore are not affected. This issue is fixed in version 2.14.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-107715</guid>
    </item>
    <item>
      <title>GHSA-2mwr-xjcg-37j7 — Mechanize sends credential headers to another host after an HTTP redirect</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-2mwr-xjcg-37j7</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; RubyGems: mechanize&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`mechanize` leaked credentials to the redirect target when an HTTP redirect crossed to another host. Credentials set through `Mechanize#request_headers=` leaked even when they were `Authorization`.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;Two defects, both in `lib/mechanize/http/agent.rb`.&lt;/p&gt;
&lt;p&gt;**1. `Mechanize#request_headers=` bypassed the redirect strip entirely.** `#request_add_headers` copied `@request_headers` onto every request unconditionally, with no host check, including the request issued after a redirect. The strip in `#response_redirect` mutated only the per-request headers hash and never touched agent state. Because `request_headers=` is the documented way to set a default credential for every request, the header the code explicitly protected — `Authorization` — was the one most likely to leak.&lt;/p&gt;
&lt;p&gt;**2. The strip list omitted `Proxy-Authorization` and `Cookie2`.** Only `CREDENTIAL_HEADERS = [&amp;#39;Authorization&amp;#39;]` and `COOKIE_HEADERS = [&amp;#39;Cookie&amp;#39;]` were removed from the per-request headers hash on a cross-host redirect.&lt;/p&gt;
&lt;p&gt;Cookies held in `Mechanize#cookie_jar` and credentials held in `Mechanize::HTTP::AuthStore` are **not** affected. Both are looked up per-URI, so they never follow a redirect to a foreign host. The exposure was limited to headers the caller set by hand.&lt;/p&gt;
&lt;p&gt;## PoC&lt;/p&gt;
&lt;p&gt;```ruby
agent = Mechanize.new
agent.request_headers = { &amp;#39;Authorization&amp;#39; =&amp;gt; &amp;#39;Bearer secret&amp;#39; }
agent.get(&amp;#39;https://example.test/redirects-to-attacker&amp;#39;)
# the request to the attacker&amp;#39;s host carries &amp;#34;Authorization: Bearer…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; RubyGems: mechanize&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`mechanize` leaked credentials to the redirect target when an HTTP redirect crossed to another host. Credentials set through `Mechanize#request_headers=` leaked even when they were `Authorization`.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;Two defects, both in `lib/mechanize/http/agent.rb`.&lt;/p&gt;
&lt;p&gt;**1. `Mechanize#request_headers=` bypassed the redirect strip entirely.** `#request_add_headers` copied `@request_headers` onto every request unconditionally, with no host check, including the request issued after a redirect. The strip in `#response_redirect` mutated only the per-request headers hash and never touched agent state. Because `request_headers=` is the documented way to set a default credential for every request, the header the code explicitly protected — `Authorization` — was the one most likely to leak.&lt;/p&gt;
&lt;p&gt;**2. The strip list omitted `Proxy-Authorization` and `Cookie2`.** Only `CREDENTIAL_HEADERS = [&amp;#39;Authorization&amp;#39;]` and `COOKIE_HEADERS = [&amp;#39;Cookie&amp;#39;]` were removed from the per-request headers hash on a cross-host redirect.&lt;/p&gt;
&lt;p&gt;Cookies held in `Mechanize#cookie_jar` and credentials held in `Mechanize::HTTP::AuthStore` are **not** affected. Both are looked up per-URI, so they never follow a redirect to a foreign host. The exposure was limited to headers the caller set by hand.&lt;/p&gt;
&lt;p&gt;## PoC&lt;/p&gt;
&lt;p&gt;```ruby
agent = Mechanize.new
agent.request_headers = { &amp;#39;Authorization&amp;#39; =&amp;gt; &amp;#39;Bearer secret&amp;#39; }
agent.get(&amp;#39;https://example.test/redirects-to-attacker&amp;#39;)
# the request to the attacker&amp;#39;s host carries &amp;#34;Authorization: Bearer…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-2mwr-xjcg-37j7</guid>
    </item>
  </channel>
</rss>
