<?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>Sat, 17 Oct 2026 05:18:59 +0000</lastBuildDate>
    <item>
      <title>CVE-2023-34457 — MechanicalSoup vulnerable to malicious web server reading arbitrary files on client using file input inside HTML form</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2023-34457</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MechanicalSoup, mechanicalsoup_project mechanicalsoup&lt;/p&gt;
&lt;p&gt;MechanicalSoup is a Python library for automating interaction with websites. Starting in version 0.2.0 and prior to version 1.3.0, a malicious web server can read arbitrary files on the client using a `&amp;lt;input type=&amp;#34;file&amp;#34; ...&amp;gt;` inside HTML form. All users of MechanicalSoup&amp;#39;s form submission are affected, unless they took very specific (and manual) steps to reset HTML form field values. Version 1.3.0 contains a patch for this issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; MechanicalSoup, mechanicalsoup_project mechanicalsoup&lt;/p&gt;
&lt;p&gt;MechanicalSoup is a Python library for automating interaction with websites. Starting in version 0.2.0 and prior to version 1.3.0, a malicious web server can read arbitrary files on the client using a `&amp;lt;input type=&amp;#34;file&amp;#34; ...&amp;gt;` inside HTML form. All users of MechanicalSoup&amp;#39;s form submission are affected, unless they took very specific (and manual) steps to reset HTML form field values. Version 1.3.0 contains a patch for this issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2023-34457</guid>
    </item>
    <item>
      <title>GHSA-x456-3ccm-m6j4 — MechanicalSoup vulnerable to malicious web server reading arbitrary files on client using file input inside HTML form</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-x456-3ccm-m6j4</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: MechanicalSoup&lt;/p&gt;
&lt;p&gt;### Summary
A malicious web server can read arbitrary files on the client using a `&amp;lt;input type=&amp;#34;file&amp;#34; ...&amp;gt;` inside HTML form.&lt;/p&gt;
&lt;p&gt;### Details
This affects the extremely common pattern of form submission:&lt;/p&gt;
&lt;p&gt;```python
b = mechanicalsoup.StatefulBrowser()
b.select_form(...)
b.submit_selected()
```&lt;/p&gt;
&lt;p&gt;The problem is with the code in `browser.Browser.get_request_kwargs`:&lt;/p&gt;
&lt;p&gt;```python
    if tag.get(&amp;#34;type&amp;#34;, &amp;#34;&amp;#34;).lower() == &amp;#34;file&amp;#34; and multipart:
        filepath = value
        if filepath != &amp;#34;&amp;#34; and isinstance(filepath, str):
            content = open(filepath, &amp;#34;rb&amp;#34;)
        else:
            content = &amp;#34;&amp;#34;
        filename = os.path.basename(filepath)
        # If value is the empty string, we still pass it
        # for consistency with browsers (see
        # https://github.com/MechanicalSoup/MechanicalSoup/issues/250).
        files[name] = (filename, content)
```&lt;/p&gt;
&lt;p&gt;The file path is taken from the bs4 tag &amp;#34;value&amp;#34; attribute. However, this path will default to whatever the server sends. So if a malicious web server were to send something like:&lt;/p&gt;
&lt;p&gt;```html
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;
  &amp;lt;form method=&amp;#34;post&amp;#34; enctype=&amp;#34;multipart/form-data&amp;#34;&amp;gt;
    &amp;lt;input type=&amp;#34;text&amp;#34; name=&amp;#34;greeting&amp;#34; value=&amp;#34;hello&amp;#34; /&amp;gt;
    &amp;lt;input type=&amp;#34;file&amp;#34; name=&amp;#34;evil&amp;#34; value=&amp;#34;/home/user/.ssh/id_rsa&amp;#34; /&amp;gt;
  &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
```&lt;/p&gt;
&lt;p&gt;then upon `.submit_selected()` the mechanicalsoup browser will happily send over the contents of your SSH private key.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;```python
import attr
import mechanicalsoup
import requests&lt;/p&gt;
&lt;p&gt;class NevermindError(Exception):…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: MechanicalSoup&lt;/p&gt;
&lt;p&gt;### Summary
A malicious web server can read arbitrary files on the client using a `&amp;lt;input type=&amp;#34;file&amp;#34; ...&amp;gt;` inside HTML form.&lt;/p&gt;
&lt;p&gt;### Details
This affects the extremely common pattern of form submission:&lt;/p&gt;
&lt;p&gt;```python
b = mechanicalsoup.StatefulBrowser()
b.select_form(...)
b.submit_selected()
```&lt;/p&gt;
&lt;p&gt;The problem is with the code in `browser.Browser.get_request_kwargs`:&lt;/p&gt;
&lt;p&gt;```python
    if tag.get(&amp;#34;type&amp;#34;, &amp;#34;&amp;#34;).lower() == &amp;#34;file&amp;#34; and multipart:
        filepath = value
        if filepath != &amp;#34;&amp;#34; and isinstance(filepath, str):
            content = open(filepath, &amp;#34;rb&amp;#34;)
        else:
            content = &amp;#34;&amp;#34;
        filename = os.path.basename(filepath)
        # If value is the empty string, we still pass it
        # for consistency with browsers (see
        # https://github.com/MechanicalSoup/MechanicalSoup/issues/250).
        files[name] = (filename, content)
```&lt;/p&gt;
&lt;p&gt;The file path is taken from the bs4 tag &amp;#34;value&amp;#34; attribute. However, this path will default to whatever the server sends. So if a malicious web server were to send something like:&lt;/p&gt;
&lt;p&gt;```html
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;
  &amp;lt;form method=&amp;#34;post&amp;#34; enctype=&amp;#34;multipart/form-data&amp;#34;&amp;gt;
    &amp;lt;input type=&amp;#34;text&amp;#34; name=&amp;#34;greeting&amp;#34; value=&amp;#34;hello&amp;#34; /&amp;gt;
    &amp;lt;input type=&amp;#34;file&amp;#34; name=&amp;#34;evil&amp;#34; value=&amp;#34;/home/user/.ssh/id_rsa&amp;#34; /&amp;gt;
  &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
```&lt;/p&gt;
&lt;p&gt;then upon `.submit_selected()` the mechanicalsoup browser will happily send over the contents of your SSH private key.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;```python
import attr
import mechanicalsoup
import requests&lt;/p&gt;
&lt;p&gt;class NevermindError(Exception):…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-x456-3ccm-m6j4</guid>
    </item>
  </channel>
</rss>
