<?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>Tue, 06 Oct 2026 10:05:34 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-40072 — web3.py affected by SSRF via CCIP Read (EIP-3668) OffchainLookup URL handling</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-40072</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; ethereum web3.py&lt;/p&gt;
&lt;p&gt;web3.py allows you to interact with the Ethereum blockchain using Python. From 6.0.0b3 to before 7.15.0 and 8.0.0b2, web3.py implements CCIP Read / OffchainLookup (EIP-3668) by performing HTTP requests to URLs supplied by smart contracts in offchain_lookup_payload[&amp;#34;urls&amp;#34;]. The implementation uses these contract-supplied URLs directly (after {sender} / {data} template substitution) without any destination validation. CCIP Read is enabled by default (global_ccip_read_enabled = True on all providers), meaning any application using web3.py&amp;#39;s .call() method is exposed without explicit opt-in. This results in Server-Side Request Forgery (SSRF) when web3.py is used in backend services, indexers, APIs, or any environment that performs eth_call / .call() against untrusted or user-supplied contract addresses. A malicious contract can force the web3.py process to issue HTTP requests to arbitrary destinations, including internal network services and cloud metadata endpoints. This vulnerability is fixed in 7.15.0 and 8.0.0b2.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; ethereum web3.py&lt;/p&gt;
&lt;p&gt;web3.py allows you to interact with the Ethereum blockchain using Python. From 6.0.0b3 to before 7.15.0 and 8.0.0b2, web3.py implements CCIP Read / OffchainLookup (EIP-3668) by performing HTTP requests to URLs supplied by smart contracts in offchain_lookup_payload[&amp;#34;urls&amp;#34;]. The implementation uses these contract-supplied URLs directly (after {sender} / {data} template substitution) without any destination validation. CCIP Read is enabled by default (global_ccip_read_enabled = True on all providers), meaning any application using web3.py&amp;#39;s .call() method is exposed without explicit opt-in. This results in Server-Side Request Forgery (SSRF) when web3.py is used in backend services, indexers, APIs, or any environment that performs eth_call / .call() against untrusted or user-supplied contract addresses. A malicious contract can force the web3.py process to issue HTTP requests to arbitrary destinations, including internal network services and cloud metadata endpoints. This vulnerability is fixed in 7.15.0 and 8.0.0b2.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-40072</guid>
    </item>
    <item>
      <title>GHSA-5hr4-253g-cpx2 — web3.py: SSRF via CCIP Read (EIP-3668) OffchainLookup URL handling</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-5hr4-253g-cpx2</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: web3&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;web3.py implements CCIP Read / `OffchainLookup` (EIP-3668) by performing HTTP requests to URLs supplied by smart contracts in `offchain_lookup_payload[&amp;#34;urls&amp;#34;]`. The implementation uses these contract-supplied URLs directly (after `{sender}` / `{data}` template substitution) without any destination validation:&lt;/p&gt;
&lt;p&gt;- No restriction to `https://` (and no opt-in gate for `http://`)
- No hostname or IP allowlist
- No blocking of private/reserved IP ranges (loopback, link-local, RFC1918)
- No redirect target validation (both `requests` and `aiohttp` follow redirects by default)&lt;/p&gt;
&lt;p&gt;**CCIP Read is enabled by default** (`global_ccip_read_enabled = True` on all providers), meaning any application using web3.py&amp;#39;s `.call()` method is exposed without explicit opt-in.&lt;/p&gt;
&lt;p&gt;This results in **Server-Side Request Forgery (SSRF)** when web3.py is used in backend services, indexers, APIs, or any environment that performs `eth_call` / `.call()` against untrusted or user-supplied contract addresses. A malicious contract can force the web3.py process to issue HTTP requests to arbitrary destinations, including internal network services and cloud metadata endpoints.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Why This Is a Vulnerability&lt;/p&gt;
&lt;p&gt;The argument is not that CCIP Read itself is invalid or that web3.py should stop supporting EIP-3668. The issue is that, in server-side deployments (backends, indexers, bots, APIs), the current implementation doesn&amp;#39;t provide destination policy controls, such as a validation/override hook, private…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: web3&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;web3.py implements CCIP Read / `OffchainLookup` (EIP-3668) by performing HTTP requests to URLs supplied by smart contracts in `offchain_lookup_payload[&amp;#34;urls&amp;#34;]`. The implementation uses these contract-supplied URLs directly (after `{sender}` / `{data}` template substitution) without any destination validation:&lt;/p&gt;
&lt;p&gt;- No restriction to `https://` (and no opt-in gate for `http://`)
- No hostname or IP allowlist
- No blocking of private/reserved IP ranges (loopback, link-local, RFC1918)
- No redirect target validation (both `requests` and `aiohttp` follow redirects by default)&lt;/p&gt;
&lt;p&gt;**CCIP Read is enabled by default** (`global_ccip_read_enabled = True` on all providers), meaning any application using web3.py&amp;#39;s `.call()` method is exposed without explicit opt-in.&lt;/p&gt;
&lt;p&gt;This results in **Server-Side Request Forgery (SSRF)** when web3.py is used in backend services, indexers, APIs, or any environment that performs `eth_call` / `.call()` against untrusted or user-supplied contract addresses. A malicious contract can force the web3.py process to issue HTTP requests to arbitrary destinations, including internal network services and cloud metadata endpoints.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Why This Is a Vulnerability&lt;/p&gt;
&lt;p&gt;The argument is not that CCIP Read itself is invalid or that web3.py should stop supporting EIP-3668. The issue is that, in server-side deployments (backends, indexers, bots, APIs), the current implementation doesn&amp;#39;t provide destination policy controls, such as a validation/override hook, private…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-5hr4-253g-cpx2</guid>
    </item>
    <item>
      <title>PYSEC-2026-3414 — web3.py: SSRF via CCIP Read (EIP-3668) OffchainLookup URL handling</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-3414</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: web3&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;web3.py implements CCIP Read / `OffchainLookup` (EIP-3668) by performing HTTP requests to URLs supplied by smart contracts in `offchain_lookup_payload[&amp;#34;urls&amp;#34;]`. The implementation uses these contract-supplied URLs directly (after `{sender}` / `{data}` template substitution) without any destination validation:&lt;/p&gt;
&lt;p&gt;- No restriction to `https://` (and no opt-in gate for `http://`)
- No hostname or IP allowlist
- No blocking of private/reserved IP ranges (loopback, link-local, RFC1918)
- No redirect target validation (both `requests` and `aiohttp` follow redirects by default)&lt;/p&gt;
&lt;p&gt;**CCIP Read is enabled by default** (`global_ccip_read_enabled = True` on all providers), meaning any application using web3.py&amp;#39;s `.call()` method is exposed without explicit opt-in.&lt;/p&gt;
&lt;p&gt;This results in **Server-Side Request Forgery (SSRF)** when web3.py is used in backend services, indexers, APIs, or any environment that performs `eth_call` / `.call()` against untrusted or user-supplied contract addresses. A malicious contract can force the web3.py process to issue HTTP requests to arbitrary destinations, including internal network services and cloud metadata endpoints.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Why This Is a Vulnerability&lt;/p&gt;
&lt;p&gt;The argument is not that CCIP Read itself is invalid or that web3.py should stop supporting EIP-3668. The issue is that, in server-side deployments (backends, indexers, bots, APIs), the current implementation doesn&amp;#39;t provide destination policy controls, such as a validation/override hook, private…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: web3&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;web3.py implements CCIP Read / `OffchainLookup` (EIP-3668) by performing HTTP requests to URLs supplied by smart contracts in `offchain_lookup_payload[&amp;#34;urls&amp;#34;]`. The implementation uses these contract-supplied URLs directly (after `{sender}` / `{data}` template substitution) without any destination validation:&lt;/p&gt;
&lt;p&gt;- No restriction to `https://` (and no opt-in gate for `http://`)
- No hostname or IP allowlist
- No blocking of private/reserved IP ranges (loopback, link-local, RFC1918)
- No redirect target validation (both `requests` and `aiohttp` follow redirects by default)&lt;/p&gt;
&lt;p&gt;**CCIP Read is enabled by default** (`global_ccip_read_enabled = True` on all providers), meaning any application using web3.py&amp;#39;s `.call()` method is exposed without explicit opt-in.&lt;/p&gt;
&lt;p&gt;This results in **Server-Side Request Forgery (SSRF)** when web3.py is used in backend services, indexers, APIs, or any environment that performs `eth_call` / `.call()` against untrusted or user-supplied contract addresses. A malicious contract can force the web3.py process to issue HTTP requests to arbitrary destinations, including internal network services and cloud metadata endpoints.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Why This Is a Vulnerability&lt;/p&gt;
&lt;p&gt;The argument is not that CCIP Read itself is invalid or that web3.py should stop supporting EIP-3668. The issue is that, in server-side deployments (backends, indexers, bots, APIs), the current implementation doesn&amp;#39;t provide destination policy controls, such as a validation/override hook, private…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-3414</guid>
    </item>
  </channel>
</rss>
