<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog</title>
	<atom:link href="https://www.imperva.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.imperva.com/blog/</link>
	<description>Imperva Cybersecurity Blog</description>
	<lastBuildDate>Mon, 08 Jun 2026 11:58:03 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://www.imperva.com/wp-content/themes/impv/icons/favicon-32.png</url>
	<title>Blog</title>
	<link>https://www.imperva.com/blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>The Clock Is Already Ticking: Why Post-Quantum Cryptography Can&#8217;t Wait</title>
		<link>https://www.imperva.com/blog/post-quantum-cryptography/</link>
					<comments>https://www.imperva.com/blog/post-quantum-cryptography/#respond</comments>
		
		<dc:creator><![CDATA[Michael Wright]]></dc:creator>
		<pubDate>Sun, 07 Jun 2026 08:40:15 +0000</pubDate>
				<category><![CDATA[Application Security]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20994</guid>

					<description><![CDATA[<p>There is a question I have been hearing more and more from CISOs, compliance officers, and security architects over the past year. It does not start with &#8220;we had a breach&#8221; or &#8220;we failed an audit.&#8221; It starts with something that sounds almost philosophical: &#8220;Are we quantum-safe?&#8221; A year ago, that question came from the [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/post-quantum-cryptography/">The Clock Is Already Ticking: Why Post-Quantum Cryptography Can&#8217;t Wait</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>There is a question I have been hearing more and more from CISOs, compliance officers, and security architects over the past year. It does not start with &#8220;we had a breach&#8221; or &#8220;we failed an audit.&#8221; It starts with something that sounds almost philosophical:</p>
<p><strong>&#8220;Are we quantum-safe?&#8221;</strong></p>
<p>A year ago, that question came from the most forward-thinking 5% of our customer base. Today, it is coming from everyone. And that shift, from curiosity to urgency, tells you everything you need to know about where the security industry is headed.</p>
<p><a href="https://cpl.thalesgroup.com/encryption/post-quantum-crypto-agility">Post-Quantum Cryptography</a> is not a future problem anymore. It is a <strong>right now</strong> problem. And the customers asking us about it are not being paranoid. They are being smart.</p>
<p><strong>What is post-quantum cryptography? </strong>Post-quantum cryptography (PQC) is a new generation of public-key algorithms designed to remain secure against attacks from both classical and large-scale quantum computers. Unlike RSA and elliptic-curve cryptography, which rely on math that a sufficiently powerful quantum computer can break, PQC algorithms are based on mathematical problems that are believed to be hard for quantum machines as well -protecting the data your organization encrypts today from being decrypted in the future.</p>
<h2>The &#8220;Harvest Now, Decrypt Later&#8221; Threat Is Already in Motion</h2>
<p>Let us be direct about the threat model, because it is one that does not get nearly enough attention in mainstream security conversations.</p>
<p>You do not need a <a href="https://www.imperva.com/blog/what-is-quantum-computing-and-why-should-security-professionals-care/">quantum computer</a> to exist <em>today</em> for your encrypted data to already be at risk.</p>
<p>Sophisticated nation-state adversaries are actively collecting encrypted TLS traffic right now, including your transactions, your authentication sessions, and your sensitive data in transit, with the explicit intention of decrypting it later once quantum computing reaches sufficient capability. This strategy has a name: <strong>&#8220;Harvest Now, Decrypt Later.&#8221;</strong> And it is not theoretical. It is happening.</p>
<p>The implication is sobering: <strong>the security decisions you make today about encryption determine the confidentiality of data that will still be sensitive in five, ten, or fifteen years.</strong> Healthcare records. Financial transactions. Government communications. Intellectual property. Any data with long-term value is already a target for harvesting.</p>
<p>Classical TLS, the encryption backbone of the modern internet, was not built to withstand quantum-scale attacks. The mathematical problems that make RSA and ECC hard to break today become tractable for sufficiently powerful quantum computers. When that threshold is crossed, the encryption protecting decades of harvested data becomes transparent.</p>
<p>This is not a hypothetical edge case. It is a <strong>strategic, long-horizon attack</strong> that demands a strategic, long-horizon defense.</p>
<h2>Our Customers Are Already Asking. We Already Have the Answer.</h2>
<p>Here is something I want to be transparent about, because I think it matters.</p>
<p>At Thales, we have been getting questions about PQC readiness from customers consistently and with increasing frequency. These are not fringe inquiries from academic researchers or early adopters chasing the next shiny thing. These are enterprise security teams, regulated industry customers in finance, healthcare, and defense, and compliance officers who are watching the regulatory horizon and doing the math.</p>
<p>They are thinking about it. And they deserve a vendor who is already ahead of it.</p>
<p>That is exactly why I am proud to share what we have built. Thales’ Imperva platform now supports <strong>hybrid TLS handshakes combining X25519 and MLKEM768</strong>, a pairing of classical elliptic curve cryptography with a quantum-safe Key Encapsulation Mechanism aligned directly with NIST PQC standards. This hybrid approach protects connections between clients and Imperva Points of Presence with both classical and quantum-safe algorithms running simultaneously, ensuring security regardless of which threat model materializes first.</p>
<p>And we did not just build the capability for customers. <strong>We completed the migration of all Imperva sites ourselves.</strong> We validated it in production before asking anyone else to trust it.</p>
<p>That is what proactive security looks like.</p>
<h2>What Hybrid TLS Actually Looks Like in Practice</h2>
<p><img data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/What-Hybrid-TLS-Actually-Looks-Like-in-Practice-1.png" alt="What Hybrid TLS Actually Looks Like in Practice 1" width="582" height="448" class="lazyload aligncenter size-full wp-image-21003 lazyload" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/What-Hybrid-TLS-Actually-Looks-Like-in-Practice-1.png 582w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/What-Hybrid-TLS-Actually-Looks-Like-in-Practice-1-300x231.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></p>
<p>I know &#8220;hybrid TLS handshake&#8221; can sound abstract, so let me ground it in something concrete.</p>
<p>When a client connects to a Thales Imperva-protected application today, that TLS 1.3 session is authenticated using <strong>X25519MLKEM768</strong>, a combined algorithm that you can actually observe directly if you inspect the connection in Chrome&#8217;s security panel. You will see exactly what the screenshot above shows: &#8220;The connection to this site is encrypted and authenticated using TLS 1.3, X25519MLKEM768, and AES_128_GCM.&#8221;</p>
<p>That is not marketing language. That is your browser&#8217;s own security panel confirming quantum-safe encryption is active.</p>
<p>What this means practically:</p>
<ul>
<li>A classical adversary cannot break the X25519 component</li>
<li>A quantum-capable adversary cannot break the MLKEM768 component</li>
<li><strong>Both would need to be broken simultaneously</strong>, which represents an effectively impossible bar with current and near-future capabilities</li>
</ul>
<p>The hybrid model is deliberate and important. Pure PQC algorithms, while mathematically quantum-resistant, are newer and have had significantly less real-world cryptanalysis time than their classical counterparts. The hybrid approach ensures we are not trading one risk for another. We are stacking defenses. This is defense-in-depth applied to cryptography itself.</p>
<h2>Zero Performance Trade-off. No Traffic Impact. Full Protection.</h2>
<p>Here is the objection I hear almost every time PQC comes up in a customer conversation: <em>&#8220;That sounds computationally expensive. What does it do to latency?&#8221;</em></p>
<p>The answer, which genuinely surprises most people: <strong>nothing measurable.</strong></p>
<p>Our PQC implementation introduces no performance trade-off and no traffic impact. This matters enormously because one of the most common reasons organizations delay critical security upgrades is the perceived performance cost. Security teams propose the upgrade. Engineering teams push back on latency. The initiative stalls.</p>
<p>With Thales&#8217;s PQC implementation, that objection is gone.</p>
<p>Quantum-safe encryption that slows your applications down is not a real solution. It is a compliance checkbox that creates new operational problems while solving a cryptographic one. We were not willing to ship that. The implementation delivers genuine quantum-safe security without the operational tax, and that is the only version of this capability worth deploying at enterprise scale.</p>
<h2>The Compliance Horizon Is Closer Than You Think</h2>
<p>If the threat model alone is not enough to create urgency in your organization, and for some organizations it is not, that is an honest reality, then the <strong>regulatory and compliance landscape</strong> should be.</p>
<p>Governments and standards bodies have moved decisively and fast:</p>
<ul>
<li><a href="https://csrc.nist.gov/projects/post-quantum-cryptography"><strong>NIST</strong></a> finalized its first PQC standards in 2024: FIPS 203 (ML-KEM), FIPS 204 (ML-DSA), and FIPS 205 (SLH-DSA). These are no longer drafts. They are published standards.</li>
<li>The <strong>S. White House</strong> issued NSM-10 directing federal agencies to inventory cryptographic systems and prioritize PQC migration timelines</li>
<li><strong>CNSA 2.0</strong> mandates PQC adoption for national security systems with defined timelines</li>
<li><strong>Financial services regulators</strong> in the EU and UK are actively publishing PQC readiness guidance for institutions</li>
<li><strong><a href="https://cpl.thalesgroup.com/compliance/emea/data-security-compliance-dora-resilience-act">DORA</a></strong> and <strong><a href="https://cpl.thalesgroup.com/compliance/emea/nis2-directive-goal-enhance-cybersecurity-across-the-eu">NIS2</a></strong> in Europe are tightening cryptographic resilience requirements across critical infrastructure sectors</li>
</ul>
<p>The direction is unambiguous. Regulated industries, including finance, defense, and healthcare, are going to face PQC compliance requirements. The organizations that begin migration now will meet those requirements ahead of schedule, with time to test, validate, and optimize. The ones that wait will be scrambling to meet deadlines under pressure.</p>
<p>Thales’s PQC support is directly aligned with enterprise and regulated sector expectations today. When your auditor, your regulator, or your enterprise customer asks whether your traffic is quantum-safe, the answer should already be yes.</p>
<h2>This Is a Security Evolution, Not a Cryptographic Revolution</h2>
<p>I want to address something directly, because the way PQC gets discussed in the media can make it sound like a complete overhaul that requires ripping out and replacing your entire security infrastructure overnight.</p>
<p>That framing is not helpful. And it is not accurate.</p>
<p>PQC is a <strong>security evolution</strong>. The underlying architecture of TLS, certificates, and encrypted communications does not change. The mathematical primitives powering key exchange and authentication do. For most organizations, particularly those working with a security partner like Imperva that has already done the migration work, the path forward is far more manageable than the &#8220;quantum apocalypse&#8221; narrative suggests.</p>
<p>The hybrid approach makes this especially true. You do not abandon classical cryptography overnight. You layer quantum-safe algorithms alongside proven ones, maintain backward compatibility where needed, and progressively increase quantum-safe coverage as the ecosystem matures and client-side support expands.</p>
<p>Supporting our customers to be PQC compliant at the start of the year was just one step in that evolution. It is a step we took proactively, before our customers needed to ask twice, because that is what it means to be a security partner rather than just a security vendor.</p>
<h2>What You Should Do Right Now</h2>
<p>If you are a CISO, a security architect, or a compliance officer reading this, here is where I would focus your energy:</p>
<ol>
<li><strong> Inventory your cryptographic exposure.</strong><br />
Understand which systems handle data with long-term sensitivity. Those are your highest-priority migration targets. Build cryptographic agility, the ability to swap algorithms without architectural overhaul, into your design principles going forward.</li>
<li><strong> Ask your vendors the question.</strong><br />
&#8220;Are you quantum-safe?&#8221; is now a legitimate and necessary vendor evaluation criterion. Any security vendor without a PQC roadmap, let alone a GA capability in production, should be on notice.</li>
<li><strong> Do not wait for regulatory mandates to force your hand.</strong><br />
The organizations that will navigate PQC transitions smoothly are the ones building the capability now. The ones scrambling to meet a 2027 or 2028 compliance deadline will pay for the delay in both cost and risk.</li>
<li><strong> Understand why the hybrid model is the right posture.</strong><br />
Pure PQC is not the immediate goal for most enterprise environments. Hybrid classical plus quantum-safe is the right posture for 2026. Demand that from your vendors and your internal security teams.</li>
<li><strong> Talk to Thales.</strong><br />
We have done this. Our sites are migrated, our customer sites are migrated. Our PoPs support hybrid TLS with MLKEM768 today. We can help you understand what your path looks like and what questions you should be asking across your vendor portfolio.</li>
</ol>
<h2>The Bottom Line</h2>
<p>The harvest is already happening. The standards are finalized. The regulatory expectations are forming. And the technology to protect yourself, without performance trade-offs, without ripping out your stack, is available right now.</p>
<p>Our customers are asking about PQC readiness because they understand the stakes. They are thinking about long-horizon risk in a way that their boards and regulators are increasingly demanding. And they deserve a security partner who is not just thinking about it alongside them but has already built, tested, and deployed the answer.</p>
<p>Post-Quantum Cryptography is not a problem for the security teams of 2030. It is a problem for the security teams of today, being solved by the tools available today.</p>
<p>Thales is quantum-ready.</p>
<p><strong>The question is: are you?</strong></p>
<p><em>Thales Imperva&#8217;s Post-Quantum Cryptography support, hybrid TLS with X25519 plus MLKEM768 for Client to Imperva connections, reached General Availability at the start of 2026. To learn more about Imperva&#8217;s PQC readiness and what it means for your organization, <a href="https://www.imperva.com/contact-us/">contact us</a> or <a href="https://www.imperva.com/products/web-application-firewall-waf/">explore our Cloud WAF capabilities</a>.</em></p>
<h2>Post-Quantum Cryptography FAQ</h2>
<p><strong>What is post-quantum cryptography (PQC)?</strong></p>
<p>Post-quantum cryptography is a set of public-key algorithms designed to remain secure against attacks from large-scale quantum computers. It replaces or augments classical algorithms like RSA and elliptic-curve cryptography, whose underlying math a sufficiently powerful quantum computer could break.</p>
<p><strong>What is a “harvest now, decrypt later” attack?</strong></p>
<p>“Harvest now, decrypt later” is a strategy in which adversaries collect and store encrypted traffic today so they can decrypt it once quantum computers become powerful enough to break classical public-key cryptography. Any data that will still be sensitive in five to fifteen years—healthcare records, financial transactions, intellectual property—is already a target.</p>
<p><strong>What is ML-KEM (FIPS 203)?</strong></p>
<p>ML-KEM (Module-Lattice-based Key-Encapsulation Mechanism) is the NIST-standardized post-quantum key exchange specified in FIPS 203, published August 13, 2024. Imperva pairs ML-KEM-768 with the classical X25519 key exchange to form a hybrid TLS handshake—giving every connection both classical and quantum-safe protection.</p>
<p><strong>Why pair a quantum-safe algorithm with a classical one (hybrid TLS)?</strong></p>
<p>Pure PQC algorithms are mathematically quantum-resistant but have had far less real-world cryptanalysis than RSA or elliptic-curve cryptography. A hybrid handshake runs both classical and PQC key exchange together: an attacker would have to break both to compromise the session. It is defense-in-depth for cryptography itself, and it’s the recommended posture for 2026.</p>
<p><strong>Is Imperva quantum-safe today?</strong></p>
<p>Yes. Thales Imperva’s PQC support, hybrid TLS combining X25519 and ML-KEM-768 for client-to-Imperva connections, reached general availability at the start of 2026. All Imperva sites have already been migrated. For setup details and current handshake scenarios, see the <a href="https://docs-cybersec.thalesgroup.com/bundle/cloud-application-security/page/pqc-support.htm">Imperva PQC support documentation</a>.</p>
<p>The post <a href="https://www.imperva.com/blog/post-quantum-cryptography/">The Clock Is Already Ticking: Why Post-Quantum Cryptography Can&#8217;t Wait</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/post-quantum-cryptography/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure type="image/jpg" url="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/Why-Post-Quantum-Cryptography-Cant-Wait.jpg" length="845" />	</item>
		<item>
		<title>Imperva Customers Protected Against CVE-2026-49975 (HTTP/2 Bomb) DoS</title>
		<link>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-49975-http-2-bomb-dos/</link>
					<comments>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-49975-http-2-bomb-dos/#respond</comments>
		
		<dc:creator><![CDATA[Bar Menachem]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 15:43:34 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20988</guid>

					<description><![CDATA[<p>TL;DR: CVE-2026-49975, dubbed the “HTTP/2 Bomb,” is a critical remote Denial-of-Service (DoS) vulnerability affecting default HTTP/2 configurations of major web servers including NGINX, Apache HTTPD, Microsoft IIS, Envoy, and Cloudflare Pingora. Discovered by security firm Calif using OpenAI’s Codex, the attack combines a unique HPACK compression bomb variant with a Slowloris-style flow-control window hold to [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-49975-http-2-bomb-dos/">Imperva Customers Protected Against CVE-2026-49975 (HTTP/2 Bomb) DoS</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>TL;DR:</strong> CVE-2026-49975, dubbed the “HTTP/2 Bomb,” is a critical remote Denial-of-Service (DoS) vulnerability affecting default HTTP/2 configurations of major web servers including NGINX, Apache HTTPD, Microsoft IIS, Envoy, and Cloudflare Pingora. Discovered by security firm <a href="https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb" target="_blank" rel="noopener">Calif</a> using OpenAI’s Codex, the attack combines a unique HPACK compression bomb variant with a Slowloris-style flow-control window hold to cause immediate server outages and memory exhaustion. NGINX and Apache have rolled out fixes, while others remain exposed. Imperva customers are fully protected against exploitation attempts associated with this vulnerability.</p>
<h2><strong>About CVE-2026-49975</strong></h2>
<p>On June 3, 2026, California-based cybersecurity firm Calif disclosed a novel, highly disruptive remote denial-of-service attack chain tracked as CVE-2026-49975. The exploit targets structural similarities across default HTTP/2 protocol implementations, potentially threatening over 880,000 websites operating on default stack configurations.</p>
<p>Remarkably, the vulnerability chain was identified using OpenAI’s Codex. The AI model parsed multiple public codebases, recognizing that two distinct techniques, (each public or partially resolved for nearly a decade), could be seamlessly chained together to cripple enterprise web servers.</p>
<p>The exploit functions by combining two distinct phases:</p>
<ol>
<li><strong>The Bookkeeping Compression Bomb (HPACK):</strong> Unlike traditional compression bombs that expand huge, stuffed data strings to trigger decoded-size limits, this variant relies on an optimized, nearly empty header payload. Instead of triggering maximum header restrictions, it forces the server to spend immense memory allocations purely on the internal <em>per-entry bookkeeping</em> and structural tables of the HTTP/2 HPACK scheme.</li>
<li><strong>The Flow-Control Slowloris Hold:</strong> Once the massive internal memory overhead is forced, the attack client advertises a zero-byte flow-control window. This effectively forces the server to hang, preventing it from sending a response while concurrently resetting the send timeouts. The connection stays active, trapping the allocated server memory indefinitely.</li>
</ol>
<p>Because the attack vectors utilize standard, valid HTTP/2 frame properties, an unauthenticated attacker using a basic home computer over a 100 Mbps connection can exhaust up to 32GB of server memory within 20 seconds, knocking targeted infrastructure offline almost instantly.</p>
<p><img class="lazyload alignnone size-full wp-image-20989 lazyload" alt="CVE 2026 49975 blog" width="1030" height="304" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/CVE-2026-49975-blog.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/CVE-2026-49975-blog.png 1030w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/CVE-2026-49975-blog-300x89.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/CVE-2026-49975-blog-1024x302.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/CVE-2026-49975-blog-768x227.png 768w" sizes="(max-width: 1030px) 100vw, 1030px" /></p>
<h2><strong>What We’ve Seen</strong></h2>
<p>Following the public disclosure, Imperva Threat Research has been actively tracking reconnaissance and proof-of-concept (PoC) validation activity corresponding to the newly released guidelines.</p>
<p>Because the exploit relies on native HTTP/2 frame manipulations, specifically targeting HPACK table modifications combined with restrictive WINDOW_UPDATE flow mechanics, initial traffic patterns show distinct automated probing behavior rather than standard application-layer payloads. Attackers are running specialized tools designed to map out whether target servers handle aggressive, dense bursts of small header blocks under restricted windows without terminating the connection. Given that HTTP/2 is almost universally adopted across modern web infrastructure, any unpatched asset running default configurations of the affected servers remains a viable target for these generic probes.</p>
<h2><strong>Mitigation and Protection</strong></h2>
<p>Organizations are advised to audit their web server footprints and apply vendor updates immediately:</p>
<ul>
<li><strong>NGINX:</strong> Upstream fixes were quietly addressed in version 1.29.8+ and supported branches in April.</li>
<li><strong>Apache HTTPD:</strong> Fixes addressing the specific chaining behaviors have been integrated into late-May releases.</li>
<li><strong>Microsoft IIS, Envoy, and Cloudflare Pingora:</strong> Default configurations remain exposed at the time of writing; organizations using these platforms should closely monitor infrastructure memory thresholds or consider temporarily disabling HTTP/2 on unpatched public endpoints if downstream mitigations are not in place.</li>
</ul>
<h2><strong>Imperva Protection</strong></h2>
<p>Imperva customers with <strong>Cloud WAF</strong> deployments are <strong>protected against exploitation attempts associated with CVE-2026-49975</strong>. Cloud WAF automatically inspects and manages anomalous stream and frame structures at the edge, mitigating malicious HPACK anomalies before they reach backend services.</p>
<p>For organizations utilizing Imperva <strong>WAF-GW</strong> protecting environments where HTTP/2 is enabled, administrators should take immediate action to <strong>verify that HTTP/2 Header Restrictions are actively applied and enforced</strong> within their security policies. Ensuring these granular protocol constraints are enabled provides a critical layer of defense, blocking the dense, high-frequency header bookkeeping manipulation characteristic of the HTTP/2 Bomb exploit before it can consume backend server resources. <strong>For detailed configuration steps, please refer to the following </strong><a href="https://docs-cybersec.thalesgroup.com/bundle/z-kb-articles-knowledgebase-support/page/1786085398.html" target="_blank" rel="noopener"><strong>KB article</strong></a><strong>.</strong></p>
<h2><strong>Bottom Line</strong></h2>
<p>CVE-2026-49975 represents a significant shift in threat discovery, showing how agentic AI capabilities can systematically bridge known, siloed software behaviors into destructive new exploit chains. Because the &#8220;HTTP/2 Bomb&#8221; requires minimal bandwidth to trigger complete memory exhaustion across major web servers in their default states, patching and perimeter mitigation are urgent priorities.</p>
<p>Imperva customers remain protected. Imperva Cloud WAF and WAF Gateway inspect and drop malicious stream and frame structures, ensuring that anomalous HPACK table definitions and malicious flow-control holds are neutralized at the edge before they can induce memory stress on backend enterprise systems.</p>
<p>The post <a href="https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-49975-http-2-bomb-dos/">Imperva Customers Protected Against CVE-2026-49975 (HTTP/2 Bomb) DoS</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-49975-http-2-bomb-dos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure type="image/jpg" url="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/06/person-using-computer-and-programming-to-break-code.jpg" length="1500" />	</item>
		<item>
		<title>Imperva Customers Protected Against CVE-2026-45247 in Mirasvit Full Page Cache Warmer for Magento</title>
		<link>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-45247-in-mirasvit-full-page-cache-warmer-for-magento/</link>
					<comments>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-45247-in-mirasvit-full-page-cache-warmer-for-magento/#respond</comments>
		
		<dc:creator><![CDATA[Gabi Sharadin]]></dc:creator>
		<pubDate>Fri, 29 May 2026 18:16:18 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20985</guid>

					<description><![CDATA[<p>TL;DR: CVE-2026-45247 is a critical unauthenticated remote code execution (RCE) vulnerability affecting Mirasvit Full Page Cache Warmer for Magento 2. The flaw stems from unsafe PHP deserialization of attacker-controlled data supplied through the CacheWarmer cookie. Successful exploitation can allow attackers to execute arbitrary commands on vulnerable Magento and Adobe Commerce servers without authentication. Mirasvit released [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-45247-in-mirasvit-full-page-cache-warmer-for-magento/">Imperva Customers Protected Against CVE-2026-45247 in Mirasvit Full Page Cache Warmer for Magento</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>TL;DR:</em></strong> <a href="https://www.cve.org/CVERecord?id=CVE-2026-45247" target="_blank" rel="noopener"><em>CVE-2026-45247</em></a><em> is a critical unauthenticated remote code execution (RCE) vulnerability affecting Mirasvit Full Page Cache Warmer for Magento 2. The flaw stems from unsafe PHP deserialization of attacker-controlled data supplied through the CacheWarmer cookie. Successful exploitation can allow attackers to execute arbitrary commands on vulnerable Magento and Adobe Commerce servers without authentication. Mirasvit released a fix in version 1.11.12 and organizations should update immediately. </em></p>
<p><em>Imperva customers are protected against exploitation attempts associated with CVE-2026-45247. Since disclosure, Imperva has observed active exploitation attempts containing serialized PHP object payloads designed to achieve remote code execution through PHP Object Injection gadget chains.</em></p>
<h2><strong>About CVE-2026-45247</strong></h2>
<p>On May 26, 2026, researchers at <a href="https://sansec.io/research/mirasvit-cache-warmer-object-injection" target="_blank" rel="noopener">Sansec</a> disclosed a critical vulnerability in Mirasvit Full Page Cache Warmer, a Magento and Adobe Commerce extension used to pre-populate and manage storefront cache content. The vulnerability was assigned CVE-2026-45247 and carries a CVSS score of 9.8.</p>
<p>According to the advisory, the extension processes a client-supplied CacheWarmer cookie and passes attacker-controlled data directly into PHP’s native unserialize() function without restricting which classes may be instantiated. Because the cookie is accepted on ordinary storefront requests, exploitation does not require authentication, administrative access, or any special configuration.</p>
<p>Sansec researchers found that attackers can leverage existing gadget chains present within Magento and its dependencies to escalate the vulnerability from PHP Object Injection (CWE-502) to full remote code execution. A single crafted cookie can ultimately allow arbitrary commands to be executed on the target server.</p>
<p>The vulnerability affects Mirasvit Full Page Cache Warmer versions prior to 1.11.12. Mirasvit released a patched version on May 25, 2026 and recommends all customers update immediately.</p>
<h2><strong>What We&#8217;ve Seen</strong></h2>
<p>Since disclosure, Imperva has observed active attack activity attempting to exploit CVE-2026-45247 through serialized PHP object payloads delivered via HTTP requests.</p>
<p>Observed payloads contain base64-encoded serialized objects designed to trigger PHP Object Deserialization and achieve remote code execution through commonly abused gadget chains. Several requests leverage classes from the widely used Monolog logging library, including:</p>
<ul>
<li>Monolog\Handler\SyslogUdpHandler</li>
<li>Monolog\Handler\BufferHandler</li>
<li>Monolog\Handler\FingersCrossedHandler</li>
<li>Monolog\Handler\GroupHandler</li>
</ul>
<p>The payloads attempt to invoke functions such as system() and current() to execute arbitrary commands on the underlying server. In several observed cases, attackers used test commands designed to validate successful code execution, including:</p>
<pre>echo PWNED_CVE2026_$(date +%s)</pre>
<p>and</p>
<pre>sleep 5</pre>
<p>These payloads are consistent with early-stage exploitation activity where attackers first verify vulnerability presence before deploying additional tooling, persistence mechanisms, webshells, or malware.</p>
<p>So far, observed attacks have primarily targeted <strong>Gaming</strong> and <strong>Business</strong> sites. The most targeted countries have been the <strong>United States</strong>, <strong>United Kingdom</strong>, <strong>France</strong>, and <strong>Australia</strong>.</p>
<p>The observed payloads suggest attackers are actively attempting to identify vulnerable Magento environments and validate remote command execution capabilities shortly after public disclosure.</p>
<h2><strong>Mitigation and Protection</strong></h2>
<p>Organizations using Mirasvit Full Page Cache Warmer should immediately upgrade to version <strong>1.11.12</strong> or later. Researchers noted that some organizations may be running the vulnerable component unknowingly because Cache Warmer can be bundled within other Mirasvit packages. Administrators should review installed Mirasvit modules and verify deployed versions.</p>
<p>Organizations should also review web server and application logs for suspicious CacheWarmer cookie values, particularly base64-encoded serialized object strings beginning with common PHP serialization markers. Because successful exploitation can lead to arbitrary code execution, potentially affected environments should be assessed for indicators of compromise, unauthorized file modifications, webshell deployment, and unexpected command execution activity.</p>
<p>Imperva customers are protected against exploitation attempts associated with CVE-2026-45247. Imperva Cloud WAF and WAF Gateway inspect malicious HTTP requests targeting vulnerable Magento components and can identify and block serialized object payloads, deserialization attempts, and remote code execution patterns before they reach vulnerable applications.</p>
<h2><strong>Bottom Line</strong></h2>
<p>CVE-2026-45247 represents a highly critical threat to Magento and Adobe Commerce environments due to its unauthenticated nature and potential for full remote code execution. The vulnerability requires only a crafted cookie delivered through a normal storefront request, significantly lowering the barrier to exploitation. Organizations running Mirasvit extensions should verify whether Cache Warmer is installed, update immediately to version 1.11.12 or later, and review logs for signs of exploitation activity.</p>
<p>Imperva customers remain protected against exploitation attempts associated with this vulnerability. Imperva Cloud WAF and WAF Gateway identify and block malicious deserialization payloads, PHP Object Injection attempts, and remote code execution techniques commonly used to exploit this vulnerability. By inspecting HTTP requests before they reach backend applications, Imperva helps prevent exploitation attempts from reaching vulnerable systems while organizations work to identify affected installations and apply vendor patches.</p>
<p>The post <a href="https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-45247-in-mirasvit-full-page-cache-warmer-for-magento/">Imperva Customers Protected Against CVE-2026-45247 in Mirasvit Full Page Cache Warmer for Magento</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-45247-in-mirasvit-full-page-cache-warmer-for-magento/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Real-Time Webhook Notifications: No More Lost Security Alerts</title>
		<link>https://www.imperva.com/blog/webhook-security-notifications/</link>
					<comments>https://www.imperva.com/blog/webhook-security-notifications/#respond</comments>
		
		<dc:creator><![CDATA[Gayle Baird]]></dc:creator>
		<pubDate>Fri, 22 May 2026 07:09:26 +0000</pubDate>
				<category><![CDATA[Application Security]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20965</guid>

					<description><![CDATA[<p>Every security team knows the pain: a critical alert lands in someone’s inbox, buried under dozens of other emails, or filtered out by a spam rule. By the time anyone sees it, the incident is already in full swing—no ticket opened, no Slack message sent, no automated workflow triggered. The detection worked, but the notification [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/webhook-security-notifications/">Real-Time Webhook Notifications: No More Lost Security Alerts</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Every security team knows the pain: a critical alert lands in someone’s inbox, buried under dozens of other emails, or filtered out by a spam rule. By the time anyone sees it, the incident is already in full swing—no ticket opened, no Slack message sent, no automated workflow triggered. The detection worked, but the notification system didn’t.</p>
<h2>Why email was never enough</h2>
<p>Email was always a compromise for security notifications. It’s universal, but that’s also its weakness:</p>
<ul>
<li><strong>Emails get lost.</strong> Spam filters and crowded inboxes mean critical alerts are missed, not because Imperva didn’t send them, but because no one saw them in time.</li>
<li><strong>Emails can’t trigger automation.</strong> The ideal response to a DDoS attack isn’t a human reading an email and manually opening a ticket. It’s an automated workflow that opens the ticket, posts to Slack, pages the on-call engineer, and logs the incident, instantly.</li>
<li><strong>Emails are hard to parse.</strong> Extracting structured data from an email for downstream systems is brittle and error-prone</li>
</ul>
<p>The stakes are high. Imperva research found that 44% of security professionals spend more than 20 hours a week responding to alerts, and 27% of IT professionals receive more than a million security alerts a day. When a critical notification is lost in that flood, response slows down—exactly when speed matters most.</p>
<p>The result? An operational gap between detection and response. That gap closes today.</p>
<h2>Introducing Webhook-based notifications</h2>
<p><strong>What are webhook notifications? </strong>Webhook notifications are automated, real-time messages that a system sends to a URL you choose the moment an event occurs. Instead of waiting for someone to open an email, the event data—usually structured as JSON—is pushed straight to your tools, where it can instantly trigger tickets, alerts, and automated workflows.</p>
<p>Imperva now supports <strong>webhook notifications</strong>: real-time, structured alerts delivered directly to your systems and tools. You define webhook connections in the Imperva Platform, assign them to notification policies, and from then on, your alerts go exactly where you need them—instantly, in a format your automation can use.</p>
<p>No more spam filters. No more manual ticket creation. No more copy-pasting data at midnight.</p>
<h2>Real-world webhook notification scenarios</h2>
<ul>
<li>DDoS Attack Response: A DDoS event triggers your webhook, which fires a ServiceNow ticket, posts to Slack, and pages the on-call engineer—all before anyone touches a keyboard. When the attack stops, the workflow updates the ticket and notifies the team automatically.</li>
<li>SSL Certificate Expiration: The expiration event posts directly to the right team’s Slack channel, so the responsible engineer sees it and acts before there’s an outage.</li>
<li>DNS Configuration Required: A new site needs DNS setup. The webhook creates a task and notifies the infrastructure team, so work is queued before anyone checks the console.</li>
<li>Bandwidth Overage Warning: Approaching your bandwidth limit? The webhook notifies your FinOps team and opens a ServiceNow ticket, so you can act before overage charges hit</li>
</ul>
<p>*Note: Some notification types and integrations (like Slack/Teams) are coming soon or in beta. See <a href="https://docs-cybersec.thalesgroup.com/bundle/cloud-application-security/page/webhooks.htm">documentation</a> for current coverage.</p>
<h2>Built the right way: Flexible, secure, reliable</h2>
<p>Webhook notifications are designed for enterprise reliability:</p>
<ul>
<li><strong>Backoff logic:</strong> If your endpoint isn’t reachable, Imperva retries delivery multiple times, so alerts aren’t lost to temporary outages.</li>
<li><strong>Authentication:</strong> You can add a secure code in the webhook header, making incoming notifications more trusted and secure for your environment.</li>
</ul>
<h2>The automation advantage</h2>
<p>Webhook notifications aren’t just a new channel—they’re an automation unlock. Every alert becomes a programmable trigger: DDoS events, site configuration, bandwidth thresholds. Your automation stack gets a clean, reliable feed for every significant event, enabling faster, more consistent response. This is the foundation of SOC automation: every Imperva alert becomes a programmable trigger for faster, more consistent <a href="https://www.imperva.com/learn/application-security/define-security-incident-response/">incident response</a>.</p>
<p>When alerts arrive as structured events, action no longer depends on someone noticing an email. Notifications flow straight into tickets, incident channels, or automated workflows—so the right response happens immediately and consistently.</p>
<h2>Deployment: How to set up webhook notifications</h2>
<p>There’s nothing new to install. Webhook connections are configured directly in the Imperva platform under Accounts – Webhook Connection. You name the connection, define the endpoint URL, and assign it to the desired notification policy</p>
<p>Today, webhook notifications work alongside email—so you can run both channels in parallel and migrate at your own pace.</p>
<p><img data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/webhooks-blog.png" alt="webhooks blog" width="904" height="460" class="lazyload aligncenter size-full wp-image-20974 lazyload" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/webhooks-blog.png 904w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/webhooks-blog-300x153.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/webhooks-blog-768x391.png 768w" sizes="(max-width: 904px) 100vw, 904px" /></p>
<h2>Frequently asked questions about webhook notifications</h2>
<p><strong>What are webhook notifications?</strong></p>
<p>Webhook notifications are automated, real-time messages that Imperva sends to a URL you define the moment a security or operational event occurs. The event is delivered as structured data your tools can act on immediately—opening tickets, posting to chat channels, or triggering automated workflows—without anyone reading an email first.</p>
<p><strong>How are webhook notifications more reliable than email security alerts?</strong></p>
<p>Email alerts can be lost to spam filters or buried in crowded inboxes. Webhook notifications are delivered directly to your systems, with backoff logic that retries delivery if your endpoint is temporarily unreachable and optional authentication codes in the webhook header to verify each message. The result is fewer missed alerts and a structured payload your automation can parse reliably.</p>
<p><strong>What security events can trigger an Imperva webhook?</strong></p>
<p>Webhook notifications can fire on events such as a DDoS attack starting or stopping, an SSL certificate nearing expiration, a new site that needs DNS configuration, and bandwidth overage warnings. Each event is sent to the notification policy you assign it to. Some notification types and integrations are rolling out over time, so check the Imperva documentation for current coverage.</p>
<p><strong>Can I use webhook and email notifications at the same time?</strong></p>
<p>Yes. Webhook notifications run alongside email, so you can keep both channels active and migrate to webhooks at your own pace. Many teams keep email as a backup while webhooks become the primary channel for automated response.</p>
<p><strong>How do I set up webhook notifications in Imperva?</strong></p>
<p>There is nothing new to install. In the Imperva Platform, go to Accounts – Webhook Connection, name the connection, define the endpoint URL, and assign it to the notification policy you want. For step-by-step instructions and current event coverage, see the <a href="https://docs-cybersec.thalesgroup.com/bundle/cloud-application-security/page/webhooks.htm">Imperva webhook documentation</a>.</p>
<h2>The Bottom line</h2>
<p>Webhook notifications mean fewer missed alerts, faster automation, and less manual work. Email becomes your backup, not your primary channel. At this stage access to webhook notifications is currently limited, get in touch to find out more.</p>
<p><strong>Your security workflows just got an upgrade. </strong></p>
<p><strong>Contact your Imperva account team to find out more.</strong></p>
<p>The post <a href="https://www.imperva.com/blog/webhook-security-notifications/">Real-Time Webhook Notifications: No More Lost Security Alerts</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/webhook-security-notifications/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure type="image/jpg" url="https://www.imperva.com/blog/wp-content/uploads/sites/9/2022/05/Blog-image-26-e1652971621578.jpg" length="845" />	</item>
		<item>
		<title>Imperva Customers Protected Against CVE-2026-9082 in Drupal Core</title>
		<link>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-9082-in-drupal-core/</link>
					<comments>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-9082-in-drupal-core/#respond</comments>
		
		<dc:creator><![CDATA[Gabi Sharadin]]></dc:creator>
		<pubDate>Thu, 21 May 2026 20:54:14 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20959</guid>

					<description><![CDATA[<p>TL;DR: CVE-2026-9082 is a highly critical SQL injection vulnerability in Drupal core that can be exploited by unauthenticated users against Drupal sites using PostgreSQL. The vulnerability affects Drupal’s database abstraction API and can allow specially crafted requests to trigger arbitrary SQL injection, potentially leading to information disclosure, privilege escalation, remote code execution, or additional attacks. [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-9082-in-drupal-core/">Imperva Customers Protected Against CVE-2026-9082 in Drupal Core</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>TL;DR:</em></strong><em> CVE-2026-9082 is a highly critical SQL injection vulnerability in Drupal core that can be exploited by unauthenticated users against Drupal sites using PostgreSQL. The vulnerability affects Drupal’s database abstraction API and can allow specially crafted requests to trigger arbitrary SQL injection, potentially leading to information disclosure, privilege escalation, remote code execution, or additional attacks. Drupal released patches across supported versions, and affected organizations should upgrade immediately. <strong>Imperva customers are protected against exploitation attempts associated with CVE-2026-9082. </strong></em></p>
<h2>About CVE-2026-9082</h2>
<p>On May 20, 2026, the Drupal Security Team disclosed SA-CORE-2026-004, tracked as <a href="https://www.cve.org/CVERecord?id=CVE-2026-9082" target="_blank" rel="noopener">CVE-2026-9082</a>. The vulnerability affects Drupal core versions from 8.9.0 before 10.4.10, 10.5.0 before 10.5.10, 10.6.0 before 10.6.9, 11.0.0 before 11.1.10, 11.2.0 before 11.2.12, and 11.3.0 before 11.3.10.</p>
<p>The issue exists in Drupal’s database abstraction API, which is designed to sanitize database queries and prevent SQL injection. According to <a href="https://www.drupal.org/sa-core-2026-004?" target="_blank" rel="noopener">Drupal</a>, specially crafted requests can result in arbitrary SQL injection on sites using PostgreSQL databases. The vulnerability can be exploited by unauthenticated users and may lead to information disclosure and, in some cases, privilege escalation, remote code execution, or other follow-on attacks.</p>
<p>The vulnerability is specific to PostgreSQL-backed Drupal deployments. The flaw stems from attacker-controlled array keys flowing into SQL placeholder names in Drupal’s PostgreSQL entity query handling. <a href="https://slcyber.io/research-center/keys-to-the-kingdom-anonymous-sql-injection-in-drupal-core-cve-2026-9082/" target="_blank" rel="noopener">Researchers</a> identified two unauthenticated paths to the vulnerable code: the JSON login endpoint and JSON:API filter syntax.</p>
<h2>What We’ve Seen</h2>
<p>Since CVE-2026-9082 was released, Imperva has observed over 15,000 attack attempts targeting almost 6,000 individual sites across 65 countries. Attacks are primarily targeting Gaming and Financial Services sites so far, at collectively almost 50% of all attacks.</p>
<p><img class="lazyload alignnone size-full wp-image-20961 lazyload" alt="industries" width="2046" height="1246" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/industries.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/industries.png 2046w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/industries-300x183.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/industries-1024x624.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/industries-768x468.png 768w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/industries-1536x935.png 1536w" sizes="(max-width: 2046px) 100vw, 2046px" /></p>
<p><img class="lazyload alignnone size-full wp-image-20960 lazyload" alt="countries" width="2046" height="1246" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/countries.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/countries.png 2046w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/countries-300x183.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/countries-1024x624.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/countries-768x468.png 768w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/countries-1536x935.png 1536w" sizes="(max-width: 2046px) 100vw, 2046px" /></p>
<p>Most of the observed activity so far appears to be probing. The payloads in the attached Imperva data largely focus on JSON:API routes, particularly /jsonapi/node/article, and use crafted filter parameters designed to test whether a target is vulnerable. Several payloads include Nuclei-style markers such as nuclei_sa_core_2026_004, nuclei-probe, and nuclei-probe-miss, indicating automated scanning and template-based validation activity.</p>
<p>The most common payload patterns include:</p>
<ul>
<li>JSON:API filter probes using operator=IN against the title field</li>
<li>Crafted array keys such as 0), 0)) OR 1=1 &#8211;, and _) AND 1=1&#8211;</li>
<li>Time-based SQL injection checks using PostgreSQL functions such as pg_sleep</li>
<li>UNION-style and syntax-break probes intended to validate error-based SQL injection behavior</li>
</ul>
<p>This pattern suggests attackers and scanners are primarily attempting to identify exposed Drupal sites running vulnerable PostgreSQL-backed configurations. While the activity is currently dominated by reconnaissance and validation, the nature of the vulnerability means successful exploitation could quickly move from probing to data extraction or privilege escalation.</p>
<h2>Mitigation and Protection</h2>
<p>Organizations running Drupal should upgrade immediately to one of the patched versions: <strong>10.4.10, 10.5.10, 10.6.9, 11.1.10, 11.2.12, or 11.3.10</strong>. Searchlight Cyber also noted that the same Drupal release includes Symfony and Twig security updates, making patching important even for environments not using PostgreSQL.</p>
<p><strong>Imperva customers with any WAF deployment are protected against exploitation attempts associated with CVE-2026-9082. </strong></p>
<h2>Bottom Line</h2>
<p>CVE-2026-9082 is a high-priority Drupal core vulnerability because it is remotely reachable, exploitable by unauthenticated users, and affects a core query-handling mechanism. Although the vulnerability is limited to PostgreSQL-backed Drupal sites, the widespread use of Drupal and the speed of observed scanning make this an urgent patching priority.</p>
<p>Imperva has already observed broad probing across thousands of sites and dozens of countries. Imperva customers are protected, but organizations should still patch immediately, review logs for suspicious JSON:API and /user/login?_format=json activity, and confirm whether any Drupal deployments use PostgreSQL.</p>
<p>The post <a href="https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-9082-in-drupal-core/">Imperva Customers Protected Against CVE-2026-9082 in Drupal Core</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/imperva-customers-protected-against-cve-2026-9082-in-drupal-core/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dify: When Your AI Platform Becomes the Attack Surface</title>
		<link>https://www.imperva.com/blog/dify-when-your-ai-platform-becomes-the-attack-surface/</link>
					<comments>https://www.imperva.com/blog/dify-when-your-ai-platform-becomes-the-attack-surface/#respond</comments>
		
		<dc:creator><![CDATA[Yohann Sillam]]></dc:creator>
		<pubDate>Mon, 18 May 2026 11:00:06 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20936</guid>

					<description><![CDATA[<p>Executive Summary We identified a couple of vulnerabilities in AI automation platform Dify resulting in cross-tenant sensitive information disclosure and one-click account takeover. These findings reinforce the pattern we documented in our previous n8n blogpost: even though AI automation platforms are increasingly becoming integration hubs for complex workflows, their security posture still lags behind their rapid evolution and operational importance.  Introduction Dify is an open-source platform for building LLM-powered applications: agents, chatbots, and automated workflows. With over 134,000 GitHub stars and over 10 million docker pulls, it has rapidly become [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/dify-when-your-ai-platform-becomes-the-attack-surface/">Dify: When Your AI Platform Becomes the Attack Surface</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Executive Summary</h2>
<p><span data-contrast="auto">We identified a couple of vulnerabilities in AI automation platform Dify resulting in cross-tenant sensitive information disclosure and one-click account takeover. These findings reinforce the pattern we documented in our </span><a href="https://www.imperva.com/blog/n8n-shared-credentials-and-account-takeover/" target="_blank" rel="noopener"><span data-contrast="none">previous n8n blogpost:</span></a><span data-contrast="auto"> </span><b><span data-contrast="auto">even though AI automation platforms are increasingly becoming integration hubs for complex workflows, their security posture still lags behind their rapid evolution and operational importance.</span></b><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h2>Introduction</h2>
<p><a href="https://github.com/langgenius/dify" target="_blank" rel="noopener"><span data-contrast="none">Dify</span></a><span data-contrast="auto"> is an open-source platform for building LLM-powered applications: agents, chatbots, and automated workflows. With over 134,000 GitHub stars and over 10 million docker pulls, it has rapidly become one of the most popular tools in the AI application space, offering both self-hosted and managed cloud deployments.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Our research into Dify uncovered two distinct vulnerabilities that illustrate this risk:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></p>
<ol>
<li data-leveltext="%1." data-font="Aptos" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">A file handling flaw that enables </span><span data-contrast="auto">one-click account takeover </span><span data-contrast="auto">through a single malicious link </span><i><span data-contrast="auto">(detailed below).</span></i><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="4" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">An </span><span data-contrast="auto">insufficient tenant isolation </span><span data-contrast="auto">issue in shared environments that exposes other users&#8217; application source code. </span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ol>
<p><span data-contrast="auto">Both findings point to the same structural challenge: </span><b><span data-contrast="auto">platforms that centralize trust must also centralize rigor in how they isolate users and handle untrusted input.</span></b><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">The first issue was addressed in Dify 1.13.1. The second was fixed in the sandbox layer by moving from a shared identity to per-execution UIDs, then shipped to Dify users through the newer sandbox image bundled with 1.13.3.</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Dify did not respond to any of our disclosure messages and chose to patch silently.</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span><span data-ccp-props="{}"> </span></p>
<h2>One Click to Account Takeover</h2>
<p><span data-contrast="auto">The flaw lies in how Dify handles file uploads through workflow tool nodes, such as </span><i><span data-contrast="auto">Image Downloader</span></i><span data-contrast="auto"> or </span><i><span data-contrast="auto">Image Toolbox</span></i><span data-contrast="auto">.</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">SVG is an XML-based image format that can natively embed JavaScript, via &lt;script&gt; tags or event handlers on SVG elements. When a browser renders an SVG file served from a trusted origin, any embedded script executes with full access to that origin&#8217;s session context, including cookies, local storage, and API calls.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Dify uses two subdomains:</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">upload.dify.ai:</span></b><span data-contrast="auto"> where user-uploaded files are stored and served</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:720,&quot;335559737&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:279,&quot;335559991&quot;:360}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="3" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="auto">cloud.dify.ai</span></b><span data-contrast="auto">: </span><span data-contrast="auto">the main application domain, where users authenticate and manage their workflows</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">Criti</span><span data-contrast="auto">cally, </span><span data-contrast="auto">upload.dify.ai</span><b><span data-contrast="auto"> </span></b><span data-contrast="auto">and </span><span data-contrast="auto">cloud.dify.ai </span><span data-contrast="auto">are </span><span data-contrast="auto">configured as DNS aliases. From the browser&#8217;s perspective, both subdomains resolve to the same origin. This collapses the intended security boundary: a file that should have been confined to a static asset domain is instead rendered with the full privileges of the application domain.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></p>
<p><span data-contrast="auto">A malicious SVG upload</span><span data-contrast="auto">ed to </span><span data-contrast="auto">upload.dify.ai</span><b><span data-contrast="auto"> </span></b><span data-contrast="auto">could simply be accessed via </span><span data-contrast="auto">cloud.dify.ai</span><span data-contrast="auto">, and the browser</span><span data-contrast="auto"> would execute its JavaScript payload as if it were part of the application itself.</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">But this design wouldn’t be dangerous if access control was enforced on uploaded files</span><b><span data-contrast="auto">.</span></b><span data-contrast="auto"> Each uploaded file receives a unique ID and is stored at a predictable path:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></p>
<p><span data-contrast="none">https://upload.dify[.]ai/files/tools/&lt;unique-id&gt;/filename.svg</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">However, these files are publicly accessible with no authentication and no per-user scoping (a.k.a Insecure Direct Object Reference). Anyone who knows the URL can retrieve the file. And that ID is not necessarily secret: it could leak through Referer headers or surface in shared workspace contexts.</span><span data-ccp-props="{}"> </span></p>
<p><span data-contrast="auto">Therefore, in this case, the exploitation scenario was straightforward: </span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></p>
<ul>
<li data-leveltext="-" data-font="Aptos" data-listid="5" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">The threat actor generates a malicious link leading to a resource in his account</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></li>
</ul>
<ul>
<li data-leveltext="-" data-font="Aptos" data-listid="5" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">The resource link is shared to another user, and one click leads to account takeover.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></li>
</ul>
<p><span data-contrast="auto">Eventually, Dify team fixed this first issue by </span><a href="https://github.com/langgenius/dify/commit/d20880d102d162f7d552dd9df20b1a679e01beb1" target="_blank" rel="noopener"><span data-contrast="none">overwriting the content-type of the HTTP response</span></a><span data-contrast="auto"> to &#8220;application/octet-stream&#8221;, independently from the nature of the file, represented with the </span><a href="https://github.com/langgenius/dify/blob/d20880d102d162f7d552dd9df20b1a679e01beb1/api/controllers/files/image_preview.py#L137" target="_blank" rel="noopener"><span data-contrast="none">args.as_attachment flag</span></a><span data-contrast="auto"> version 1.13.1.</span><br />
<span data-contrast="auto">This value triggers download instead of rendering.</span><span data-ccp-props="{}"> </span></p>
<div style="width: 1920px;" class="wp-video"><video class="wp-video-shortcode" id="video-20936-1" width="1920" height="360" preload="metadata" controls="controls"><source type="video/mp4" src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify.mp4?_=1" /><a href="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify.mp4">https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify.mp4</a></video></div>
<h2>Cross-Tenant Source Disclosure in the Python Sandbox</h2>
<p><span data-contrast="auto">This bug lived deeper in the stack, inside </span><b><span data-contrast="auto">dify-sandbox</span></b><span data-contrast="auto">, the service Dify uses to execute untrusted code.</span><span data-ccp-props="{&quot;335559738&quot;:299,&quot;335559739&quot;:299}"> </span></p>
<p><span data-contrast="auto">The failure here was particularly interesting, as it required a chain to fully leak other users&#8217; source code on the Dify platform.</span><span data-ccp-props="{&quot;335559738&quot;:299,&quot;335559739&quot;:299}"> </span></p>
<ol>
<li data-leveltext="%1." data-font="Aptos" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Sandboxed Python executions shared a filesystem location.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Those executions shared the same runtime identity.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">The leaked artifact contained encrypted code, not plaintext.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="7" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">But the &#8220;encryption&#8221; was repeating-key XOR, so ciphertext alone was often enough.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ol>
<h2><span data-contrast="none">Where the Leak Came From</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><img class="lazyload alignnone size-full wp-image-20945 lazyload" alt="dify1" width="1350" height="780" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify1.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify1.png 1350w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify1-300x173.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify1-1024x592.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify1-768x444.png 768w" sizes="(max-width: 1350px) 100vw, 1350px" /></p>
<p style="text-align: center"><em>Fig. 1: Dify cross-tenant source disclosure </em></p>
<p><span data-contrast="auto">The Dify monorepo only pins the sandbox image. At tag 1.13.1, Dify still shipped langgenius/dify-sandbox:0.2.12 in its compose files:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="8" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Dify 1.13.1 sandbox pin: </span><a href="https://github.com/langgenius/dify/blob/1.13.1/docker/docker-compose-template.yaml#L246-L249" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify/blob/1.13.1/docker/docker-compose-template.yaml#L246-L249</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">Inside that sandbox version, the Python runner used a fixed sandbox root:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">sandbox root definition: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/core/runner/python/setup.go#L23-L26" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/core/runner/python/setup.go#L23-L26</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="9" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">chroot behavior described in FAQ: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.12/FAQ.md#L3-L13" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.12/FAQ.md#L3-L13</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">The important detail is what happened during execution. The runner generated a temporary script under ${LIB_PATH}/tmp/&lt;uuid&gt;.py, which became /tmp/&lt;uuid&gt;.py from the Python process&#8217;s perspective after chroot. The same runner stamped every wrapper script with a single hard-coded sandbox UID:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">vulnerable runner: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/core/runner/python/python.go#L89-L164" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/core/runner/python/python.go#L89-L164</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="10" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">static sandbox UID: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/static/user.go#L1-L6" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/static/user.go#L1-L6</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">Three lines tell the story:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Identity was fixed through static.SANDBOX_USER_UID.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">The wrapper script was written with os.WriteFile(&#8230;, 0755).</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="11" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">The file lived under the shared sandbox tmp directory.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">Separate tenants executing inside the same sandbox root, under the same effective identity, with readable code artifacts left in a shared /tmp. That is the entire isolation bug.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Our proof of concept simply sampled /tmp during execution and collected newly created files. In a shared cloud deployment, that exposed wrapper scripts belonging to other tenants running on the same sandbox host.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">The attacker-side workflow looked like this:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><img class="lazyload alignnone size-full wp-image-20946 lazyload" alt="dify2" width="1516" height="960" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify2.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify2.png 1516w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify2-300x190.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify2-1024x648.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify2-768x486.png 768w" sizes="(max-width: 1516px) 100vw, 1516px" /></p>
<h2>What the Attacker Actually Stole</h2>
<p><span data-contrast="auto">The leaked file was not the raw user script.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Dify generated a Python wrapper that loaded a native seccomp helper, decoded a Base64 blob, decrypted it, and exec&#8217;d the result.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">The decryptor lived in the embedded prescript:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="12" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">prescript decryptor: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/core/runner/python/prescript.py#L22-L47" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.12/internal/core/runner/python/prescript.py#L22-L47</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">The critical line:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><img class="lazyload alignnone size-full wp-image-20947 lazyload" alt="dify3" width="1644" height="122" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify3.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify3.png 1644w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify3-300x22.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify3-1024x76.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify3-768x57.png 768w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify3-1536x114.png 1536w" sizes="(max-width: 1644px) 100vw, 1644px" /></p>
<p><span class="TextRun SCXW217571428 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW217571428 BCX0">On the Go side, the matching encryption logic was just as direct:</span></span><span class="EOP SCXW217571428 BCX0" data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><img class="lazyload alignnone size-full wp-image-20948 lazyload" alt="dify4" width="1644" height="130" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify4.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify4.png 1644w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify4-300x24.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify4-1024x81.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify4-768x61.png 768w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify4-1536x121.png 1536w" sizes="(max-width: 1644px) 100vw, 1644px" /></p>
<p><span data-contrast="auto">This looks like &#8220;encryption,&#8221; but it is really a byte-wise </span><a href="https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher" target="_blank" rel="noopener"><span data-contrast="none">Vigenere cipher</span></a><span data-contrast="auto"> with a 64-byte repeating key.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Something like that:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240,&quot;335559740&quot;:279}"> </span></p>
<p><img class="lazyload alignnone size-full wp-image-20949 lazyload" alt="dify5" width="1490" height="436" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify5.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify5.png 1490w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify5-300x88.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify5-1024x300.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify5-768x225.png 768w" sizes="(max-width: 1490px) 100vw, 1490px" /></p>
<h2>Why the Encryption Broke</h2>
<p><span data-contrast="auto">If Dify had used a modern authenticated cipher and never exposed the key, reading /tmp/&lt;uuid&gt;.py would still have been bad, but it would not immediately reveal source code. Instead, the runner:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">generated a random 64-byte key</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">XORed every plaintext byte with key[i mod 64]</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">Base64-encoded the result</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="13" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="auto">embedded the ciphertext in the wrapper script</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">Repeating-key XOR leaks structure across every byte position modulo the key length. Once the key length is known, recovery collapses into a set of small single-byte XOR problems,  not a modern cryptanalytic challenge.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Our PoC used exactly that property. The attack strategy:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ol>
<li data-leveltext="%1." data-font="Aptos" data-listid="14" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Lock onto the real key size of 64 bytes.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="14" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Score candidate plaintext bytes for &#8220;Python-likeness.&#8221;</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="14" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Slide common cribs, import , from , def main( — across the ciphertext.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
<li data-leveltext="%1." data-font="Aptos" data-listid="14" data-list-defn-props="{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Reward outputs that decode as UTF-8, contain Python tokens, and successfully parse with ast.parse.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ol>
<p><span data-contrast="auto">Workflow code is highly structured plaintext: full of repeated syntax, imports, identifiers, indentation, JSON handling, and predictable scaffolding. Even when the exact business logic is unknown, the shape of Python source gives the attacker enough signal to recover key bytes and reconstruct the rest.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">The sandbox did not need to leak the key. The ciphertext was enough.</span></p>
<p><span data-contrast="auto">A reduced version of the recovery logic:</span></p>
<p><img class="lazyload alignnone size-full wp-image-20950 lazyload" alt="dify6" width="1784" height="436" data-src="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify6.png" srcset="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify6.png 1784w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify6-300x73.png 300w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify6-1024x250.png 1024w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify6-768x188.png 768w, https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify6-1536x375.png 1536w" sizes="(max-width: 1784px) 100vw, 1784px" /></p>
<p><span data-contrast="auto">The real PoC is more careful, including crib dragging, UTF-8 heuristics, Python-token scoring, AST validation, and more.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h2>Why This Was Recoverable in Practice</h2>
<p><span data-contrast="auto">Three properties made the attack reliable.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">Fixed key size.</span></b><span data-contrast="auto"> The vulnerable runner hard-coded key_len := 64, so the PoC did not have to discover a moving target.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">Strong plaintext priors.</span></b><span data-contrast="auto"> Python source naturally contains ASCII-heavy text, repeated keywords, common import patterns, indentation and punctuation, and valid UTF-8.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><b><span data-contrast="auto">Machine-verifiable output.</span></b><span data-contrast="auto"> The PoC did not stop at &#8220;looks readable.&#8221; It strongly preferred candidates that parsed as real Python, turning recovery into a search problem with a sharp scoring function.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h2>How Dify Fixed It</h2>
<p><span data-contrast="auto">The fix landed in dify-sandbox 0.2.13:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="15" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">fix: tenant isolation use uid: </span><a href="https://github.com/langgenius/dify-sandbox/commit/6b3577c7779c4afc9f26645df5a4660a7282a566" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/commit/6b3577c7779c4afc9f26645df5a4660a7282a566</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">The patched runner changed the trust boundary in the right place:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">fixed runner: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.13/internal/core/runner/python/python.go#L30-L176" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.13/internal/core/runner/python/python.go#L30-L176</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="16" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">UID pool: </span><a href="https://github.com/langgenius/dify-sandbox/blob/0.2.13/internal/core/runner/python/uid_pool.go#L9-L67" target="_blank" rel="noopener"><span data-contrast="none">https://github.com/langgenius/dify-sandbox/blob/0.2.13/internal/core/runner/python/uid_pool.go#L9-L67</span></a><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">The important changes:</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">uid, err := AcquireUID(ctx)</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">The wrapper was written with os.WriteFile(&#8230;, 0600).</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">The file was reassigned with syscall.Chown(&#8230;, uid, &#8230;).</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="17" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="auto">The embedded prescript stopped using the single global sandbox UID and used the per-run UID instead.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p><span data-contrast="auto">This matters more than any cryptographic tweak. Before the fix, every execution looked like the same sandbox user. After the fix, each execution got its own identity and its own readable artifact set.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">Dify did not &#8220;fix the encryption.&#8221; It fixed the isolation boundary.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h2>The Impact</h2>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">One-click account takeover:</span></b><span data-contrast="auto"> The attacker acts as the victim: modifying workflows, changing settings, inviting collaborators.</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><b><span data-contrast="auto">Workflow theft:</span></b><span data-contrast="auto"> Private workflows (often encoding proprietary business logic, integration architecture, and prompt engineering) become fully accessible.</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="auto">Credential exfiltration:</span></b><span data-contrast="auto"> API keys, OAuth tokens, and model configurations stored in Dify can be extracted, enabling lateral movement into every connected external service.</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="1" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><b><span data-contrast="auto">Full instance compromise:</span></b><span data-contrast="auto"> If the victim is an administrator, the attacker gains control of the entire Dify deployment and every integration it orchestrates.</span><span data-ccp-props="{&quot;335559739&quot;:0}"> </span></li>
</ul>
<h2>Conclusion</h2>
<p><span data-contrast="auto">Both vulnerabilities we found in Dify stem from the same oversight: security controls that weren&#8217;t designed to keep pace with the platform&#8217;s feature growth. As these tools add collaboration, file sharing, and multi-tenant environments, each new surface needs to be hardened with the same rigor as the core application.</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">What makes this particularly relevant for security teams is the open-source model: Dify is widely self-hosted, meaning unpatched instances may persist long after fixes are released. Organizations running Dify (in any configuration) should verify they are on v1.13.1 or later.</span><span data-ccp-props="{&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<h2>Timeline</h2>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">January 14, 2026: initial disclosure sent</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="2" data-aria-level="1"><span data-contrast="auto">March 17, 2026: Dify 1.13.1 released, addressing the first issue</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">March 19, 2026: dify-sandbox 0.2.13 released with UID-based tenant isolation</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="4" data-aria-level="1"><span data-contrast="auto">March 20, 2026: follow-up sandbox patch stabilizes the UID-based design inside the chroot</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<ul>
<li data-leveltext="" data-font="Symbol" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" data-aria-posinset="5" data-aria-level="1"><span data-contrast="auto">March 25, 2026: Dify 1.13.3 released, bundling the fixed sandbox at 0.2.14</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}"> </span></li>
</ul>
<p>The post <a href="https://www.imperva.com/blog/dify-when-your-ai-platform-becomes-the-attack-surface/">Dify: When Your AI Platform Becomes the Attack Surface</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/dify-when-your-ai-platform-becomes-the-attack-surface/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure type="image/jpg" url="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/dify_header.png" length="1740" />	</item>
		<item>
		<title>CVE-2026-42945: Imperva Customers Protected Against Critical NGINX Rewrite Module Vulnerability</title>
		<link>https://www.imperva.com/blog/cve-2026-42945-imperva-customers-protected-against-critical-nginx-rewrite-module-vulnerability/</link>
					<comments>https://www.imperva.com/blog/cve-2026-42945-imperva-customers-protected-against-critical-nginx-rewrite-module-vulnerability/#respond</comments>
		
		<dc:creator><![CDATA[Gabi Sharadin]]></dc:creator>
		<pubDate>Sat, 16 May 2026 01:15:37 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20955</guid>

					<description><![CDATA[<p>TL;DR: Researchers recently disclosed CVE-2026-42945, a critical heap-based buffer overflow vulnerability affecting both NGINX Open Source and NGINX Plus. The flaw exists within the ngx_http_rewrite_module component and can allow unauthenticated attackers to trigger denial-of-service conditions and potentially achieve remote code execution (RCE) using specially crafted HTTP requests. Imperva Threat Research Group analyzed the vulnerability and [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/cve-2026-42945-imperva-customers-protected-against-critical-nginx-rewrite-module-vulnerability/">CVE-2026-42945: Imperva Customers Protected Against Critical NGINX Rewrite Module Vulnerability</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em><strong>TL;DR:</strong> Researchers recently disclosed CVE-2026-42945, a critical heap-based buffer overflow vulnerability affecting both NGINX Open Source and NGINX Plus. The flaw exists within the ngx_http_rewrite_module component and can allow unauthenticated attackers to trigger denial-of-service conditions and potentially achieve remote code execution (RCE) using specially crafted HTTP requests. </em></p>
<p><em>Imperva Threat Research Group analyzed the vulnerability and associated exploitation techniques. Imperva customers using Cloud WAF or On-Prem WAF are protected against attack attempts targeting this issue.</em></p>
<h2><strong>The Vulnerability</strong></h2>
<p><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-42945" target="_blank" rel="noopener">CVE-2026-42945</a> is a heap-based buffer overflow vulnerability in the ngx_http_rewrite_module component of NGINX Open Source and NGINX Plus. The issue, nicknamed NGINX Rift, occurs when specific rewrite-rule patterns are processed using unnamed Perl-Compatible Regular Expression (PCRE) capture groups such as $1 or $2, combined with replacement strings containing a question mark (?) and followed by additional rewrite, if, or set directives.</p>
<p>Under vulnerable conditions, specially crafted HTTP requests can trigger heap corruption within the NGINX worker process. Public research indicates this can reliably cause worker crashes and denial-of-service conditions, while some researchers also demonstrated potential paths toward remote code execution under favorable memory-layout conditions.</p>
<p>The vulnerability was discovered through autonomous analysis of the NGINX codebase and reportedly remained dormant for nearly two decades. Researchers described the issue as arising from a state mismatch in rewrite processing logic that ultimately results in unsafe memory handling during URI rewriting operations.</p>
<p>In practical terms, an attacker sends a crafted HTTP request designed to reach a vulnerable rewrite rule. During processing, attacker-controlled URI data can overflow allocated heap memory inside the worker process. Depending on the target environment and mitigations such as ASLR, exploitation may result in:</p>
<ul>
<li>Worker process crashes</li>
<li>Repeated restart loops</li>
<li>Application-layer denial of service</li>
<li>Potential remote code execution within the NGINX worker context</li>
</ul>
<p>The flaw affects:</p>
<ul>
<li>NGINX Open Source versions 0.6.27 through 1.30.0</li>
<li>NGINX Plus R32 through R36</li>
</ul>
<p>Patched releases include:</p>
<ul>
<li>NGINX Open Source 1.30.1 and 1.31.0+</li>
<li>NGINX Plus R32 P6 and R36 P4</li>
</ul>
<p>Because rewrite directives are extremely common in real-world NGINX deployments, particularly in reverse proxies, API gateways, load balancers, authentication flows, and URL routing logic, exposure may extend across a substantial portion of internet-facing infrastructure. NGINX was the most widely deployed web server on the internet as of 2025, <a href="https://w3techs.com/technologies/overview/web_server" target="_blank" rel="noopener">supporting 32.4% of all websites with known web servers</a>, so the exposure surface is extremely broad across enterprise, cloud, SaaS, and e-commerce environments.</p>
<p>Some of the techniques associated with exploitation include:</p>
<ul>
<li>Crafted HTTP requests targeting vulnerable rewrite rules</li>
<li>Abuse of unnamed PCRE capture groups ($1, $2)</li>
<li>Heap corruption via malformed URI rewriting operations</li>
<li>Application-layer denial of service through worker crashes</li>
<li>Potential memory manipulation leading to remote code execution</li>
<li>Automated internet-wide scanning for exposed NGINX deployments</li>
</ul>
<p>Unlike traditional volumetric DDoS attacks, exploitation of CVE-2026-42945 targets the application processing layer directly, allowing attackers to disrupt services using relatively small numbers of malicious requests.</p>
<h2>Bottom Line</h2>
<p>CVE-2026-42945 demonstrates how long-lived vulnerabilities in foundational internet infrastructure can remain undiscovered for years while silently exposing a massive attack surface. By abusing rewrite-processing logic inside ngx_http_rewrite_module, attackers can trigger heap corruption using crafted HTTP requests, leading to denial-of-service conditions and potentially remote code execution.</p>
<p>Because NGINX is deeply embedded within modern web infrastructure, including reverse proxies, API gateways, SaaS applications, and cloud environments, organizations should prioritize patching affected systems immediately and review rewrite-rule configurations for vulnerable patterns involving unnamed PCRE captures.</p>
<p>Imperva Cloud WAF and On-Prem WAF customers are protected against related attack activity.</p>
<p>The post <a href="https://www.imperva.com/blog/cve-2026-42945-imperva-customers-protected-against-critical-nginx-rewrite-module-vulnerability/">CVE-2026-42945: Imperva Customers Protected Against Critical NGINX Rewrite Module Vulnerability</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/cve-2026-42945-imperva-customers-protected-against-critical-nginx-rewrite-module-vulnerability/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Using Bedrock with Claude Code? Your AWS Credentials Are Shared With Every Subprocess</title>
		<link>https://www.imperva.com/blog/using-bedrock-with-claude-code-your-aws-credentials-are-shared-with-every-subprocess/</link>
					<comments>https://www.imperva.com/blog/using-bedrock-with-claude-code-your-aws-credentials-are-shared-with-every-subprocess/#respond</comments>
		
		<dc:creator><![CDATA[Ori Nakar]]></dc:creator>
		<pubDate>Thu, 14 May 2026 15:00:03 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20930</guid>

					<description><![CDATA[<p>Many developers today are using Claude Code, with a growing portion running it through Amazon Bedrock. For enterprise teams, Bedrock offers major advantages: keeping data inside a VPC, leveraging AWS credits, and integrating with existing IAM controls, monitoring, and security policies. Bedrock adoption also grows significantly among larger organizations and enterprise environments &#8211; but this setup can also introduce security risks [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/using-bedrock-with-claude-code-your-aws-credentials-are-shared-with-every-subprocess/">Using Bedrock with Claude Code? Your AWS Credentials Are Shared With Every Subprocess</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span data-contrast="auto">Many developers today are using Claude Code, with a growing portion running it through Amazon Bedrock. For enterprise teams, Bedrock offers major advantages: keeping data inside a VPC, leveraging AWS credits, and integrating with existing IAM controls, monitoring, and security policies. Bedrock adoption also grows significantly among larger organizations and enterprise environments &#8211; but this setup can also introduce security risks or unintended configuration mistakes in real-world usage.</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}"> </span></p>
<p><span data-contrast="auto">If you’re running Claude Code with AWS Bedrock, there’s something you need to know: </span><b><span data-contrast="auto">the AWS credentials you configure for Bedrock don’t stay confined to Bedrock. </span></b><span data-contrast="auto">They might be shared with every shell command, every MCP server, and every subprocess that Claude Code spawns. And depending on how those credentials are scoped, that could mean full access to your entire AWS account.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<h2><span data-contrast="none">The Problem in a Nutshell</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">When you set up Claude Code for Bedrock, you store your AWS credentials in </span><span data-contrast="auto">~/.claude/settings.json</span><span data-contrast="auto">:</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<pre><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">{</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0">   </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"env"</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">:</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0"> </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">{</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0">     </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"AWS_ACCESS_KEY_ID"</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">:</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0"> </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"..."</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0">     </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"AWS_SECRET_ACCESS_KEY"</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">:</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0"> </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"..."</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0">     </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"AWS_DEFAULT_REGION"</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">:</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0"> </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"us-east-1"</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">,</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0">     </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"CLAUDE_CODE_USE_BEDROCK"</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">:</span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0"> </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">"1"</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="auto"><span class="NormalTextRun SCXW254787369 BCX0">   </span></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">}</span></span><span class="LineBreakBlob BlobObject DragDrop SCXW254787369 BCX0"><span class="SCXW254787369 BCX0"> </span><br class="SCXW254787369 BCX0" /></span><span class="TextRun SCXW254787369 BCX0" lang="EN-US" xml:lang="EN-US" data-contrast="none"><span class="NormalTextRun SCXW254787369 BCX0">}</span></span><span class="EOP SCXW254787369 BCX0" data-ccp-props="{&quot;335559739&quot;:200}"> 
</span></pre>
<p><span data-contrast="auto">These environment variables get loaded into the Claude Code process. So far, so normal. The issue is that Unix processes inherit environment variables from their parent. Every time Claude Code runs a shell command, spawns an MCP server, or launches any subprocess, those child processes get your AWS credentials too.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><span data-contrast="auto">That means any </span><span data-contrast="auto">AWS </span><span data-contrast="auto">CLI command executed through Claude Code authenticates as your IAM principal. Not just for Bedrock, but for everything that principal has permissions to do.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<h2><span data-contrast="none">How This Goes Wrong in Practice</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">The security boundary here is entirely on the IAM policy side, Claude Code itself applies no restriction. If your IAM user only has `AmazonBedrockLimitedAccess`, the blast radius is minimal. But in practice, credentials often have broader permissions than intended. None of the scenarios below require an attacker or a sophisticated exploit, they’re everyday mistakes that happen when AWS credentials are broader than they need to be.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<ol>
<li><strong> Reusing your everyday IAM user</strong></li>
</ol>
<p><span data-contrast="auto">You already have an IAM user you use for daily development, like deploying lambdas, reading S3, or managing EC2 instances. Instead of creating a dedicated user for Claude Code, you drop those same credentials into </span><span data-contrast="auto">settings.json</span><span data-contrast="auto"> because it’s faster. Now Claude Code has access to everything you do: production databases, customer data in S3, IAM itself. You meant to give it Bedrock access, but you actually gave it your entire AWS footprint.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<ol start="2">
<li><strong> Operating on the wrong environment</strong></li>
</ol>
<p><span data-contrast="auto">You’re working on a staging project, but the credentials in </span><span data-contrast="auto">settings.json</span><span data-contrast="auto"> belong to your production account. You ask Claude Code to “delete the old test data from S3” or “terminate the idle instances.” Claude Code generates the right AWS CLI commands for the task, but runs them against production. There’s no visual indicator in Claude Code telling you which AWS account or environment is active. The approval prompt shows </span><span data-contrast="auto">aws s3 rm,</span><span data-contrast="auto"> and you click accept because the command looks correct for what you asked.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<ol start="3">
<li><strong> Permissions drifting over time</strong></li>
</ol>
<p><span data-contrast="auto">You start with a tightly scoped IAM user for Bedrock only. Months later, someone on your team attaches </span><span data-contrast="auto">AmazonS3ReadOnlyAccess</span><span data-contrast="auto"> for a one-off migration script and forgets to remove it. Then </span><span data-contrast="auto">PowerUserAccess</span><span data-contrast="auto"> gets added during an incident for quick debugging. The Claude Code credentials silently gain more power over time, and nobody audits what it can actually do because “it’s just the Bedrock user.”</span><span data-ccp-props="{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559685&quot;:0,&quot;335559737&quot;:0,&quot;335559738&quot;:180,&quot;335559739&quot;:180,&quot;335559740&quot;:279}"> </span></p>
<ol start="4">
<li><strong> Shared credentials across a team</strong></li>
</ol>
<p><span data-contrast="auto">A team lead sets up an IAM user for Claude Code and shares the credentials in a wiki or Slack channel for the team to use. Now multiple developers are running Claude Code with the same identity. There’s no way to distinguish who did what in CloudTrail logs. If one developer’s session is compromised through prompt injection, the blast radius covers everyone using those credentials, and attribution is impossible.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<h2><span data-contrast="none">The Attack Scenarios</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">This isn’t just a theoretical concern. There are several realistic ways this can go wrong:</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Accidental over-provisioning</span></b><span data-contrast="auto"> is the most likely scenario. A developer uses Claude Code normally, unaware that a “clean up old files” prompt could generate AWS CLI commands touching production S3 buckets or EC2 instances.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Prompt injection</span></b><span data-contrast="auto"> is more targeted. An attacker plants malicious instructions in a repository file: a README, a config file, a code comment. When Claude Code reads the file, the injected instruction can influence it to generate AWS CLI commands that exfiltrate data or create backdoor access keys. The user sees an approval prompt but might not catch the malicious intent among legitimate-looking operations.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Compromised MCP servers</span></b><span data-contrast="auto"> inherit the full environment as subprocesses. A malicious or supply-chain-compromised MCP server can silently make AWS API calls using your credentials.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<h2><span data-contrast="none">What You Should Do</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><b><span data-contrast="auto">Scope your credentials tightly.</span></b><span data-contrast="auto"> The IAM user or role you configure for Claude Code should have the absolute minimum permissions needed, ideally only </span><span data-contrast="auto">bedrock:InvokeModel*</span><span data-contrast="auto"> and related Bedrock actions. Audit what’s attached right now. You might be surprised.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Consider using Bedrock API keys instead of IAM credentials.</span></b><span data-contrast="auto"> Claude Code supports </span><span data-contrast="auto">AWS_BEARER_TOKEN_BEDROCK</span><span data-contrast="auto">, which is inherently scoped to Bedrock operations. API keys can’t be used by the AWS CLI for non-Bedrock operations. This is the most effective mitigation available today and requires no infrastructure changes.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Use temporary credentials.</span></b><span data-contrast="auto"> If you must use IAM credentials, prefer STS temporary credentials or SSO-based authentication over long-lived access keys. They at least limit the exposure window.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Pay attention to shell command approval prompts.</span></b><span data-contrast="auto"> When Claude Code asks permission to run a command &#8211;  read it. Look for </span><span data-contrast="auto">aws</span><span data-contrast="auto"> CLI commands that access services beyond what you’d expect. If you see </span><span data-contrast="auto">aws s3</span><span data-contrast="auto">, </span><span data-contrast="auto">aws ec2</span><span data-contrast="auto">, </span><span data-contrast="auto">aws iam</span><span data-contrast="auto">, or similar, think about whether that’s something you intended to allow.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><b><span data-contrast="auto">Audit your settings.json.</span></b><span data-contrast="auto"> Run </span><span data-contrast="auto">aws sts get-caller-identity</span><span data-contrast="auto"> with the configured credentials and check what policies are attached to that principal. If the answer is anything broader than Bedrock access, tighten it.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<h2><span data-contrast="none">The Bigger Picture</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:160,&quot;335559739&quot;:80}"> </span></h2>
<p><span data-contrast="auto">This is a classic example of the principle of least privilege being violated through environment inheritance, a well-understood Unix behavior that becomes a security issue when credentials meant for one purpose are implicitly available for all purposes.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><span data-contrast="auto">Claude Code’s shell command approval prompt provides some protection, but it’s a thin layer. Users lack context about which AWS credentials are active and what permissions they grant. Approval fatigue, the tendency to reflexively accept prompts after seeing enough of them, further erodes this safeguard.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p><span data-contrast="auto">The ideal fix would be credential isolation: Bedrock credentials should be internal to Claude Code and never exposed to shell subprocesses through environment variables. Until that happens, and according to Anthropic, the responsibility falls on you to ensure your credentials are scoped as narrowly as possible.</span><span data-ccp-props="{&quot;335559738&quot;:180,&quot;335559739&quot;:180}"> </span></p>
<p>The post <a href="https://www.imperva.com/blog/using-bedrock-with-claude-code-your-aws-credentials-are-shared-with-every-subprocess/">Using Bedrock with Claude Code? Your AWS Credentials Are Shared With Every Subprocess</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/using-bedrock-with-claude-code-your-aws-credentials-are-shared-with-every-subprocess/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure type="image/jpg" url="https://www.imperva.com/blog/wp-content/uploads/sites/9/2026/05/claude_code_header-1.png" length="1774" />	</item>
		<item>
		<title>Why AI Agents Make API Security a CISO Priority</title>
		<link>https://www.imperva.com/blog/why-ai-agents-make-api-security-a-ciso-priority/</link>
					<comments>https://www.imperva.com/blog/why-ai-agents-make-api-security-a-ciso-priority/#respond</comments>
		
		<dc:creator><![CDATA[Rohit Kumar]]></dc:creator>
		<pubDate>Sun, 10 May 2026 11:13:40 +0000</pubDate>
				<category><![CDATA[Application Security]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20921</guid>

					<description><![CDATA[<p>AI agents are not a future concern. They are already changing how enterprise systems are accessed, automated, and abused. And the security implication is clear: the more autonomous systems rely on APIs, the more important it becomes to know exactly which APIs exist, how they are being used, and whether they are being misused. If [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/why-ai-agents-make-api-security-a-ciso-priority/">Why AI Agents Make API Security a CISO Priority</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="font-weight: 400;">AI agents are not a future concern. They are already changing how enterprise systems are accessed, automated, and abused.</span></p>
<p><span style="font-weight: 400;">And the security implication is clear: the more autonomous systems rely on APIs, the more important it becomes to know exactly which APIs exist, how they are being used, and whether they are being misused.</span></p>
<p><span style="font-weight: 400;">If your organization cannot answer those questions, you have a visibility problem. And in an environment where AI can accelerate both legitimate automation and malicious abuse, visibility is the first step to control.</span></p>
<h2><b>Risk accelerating</b></h2>
<p><span style="font-weight: 400;">APIs have always been a target because they expose data and business logic. What has changed is pace.</span></p>
<p><span style="font-weight: 400;">AI can now help attackers discover endpoints faster, test more abuse paths, and automate attacks that once took much more effort. Meanwhile, AI agents inside the enterprise are generating more API traffic, often with broader privileges than anyone intended.</p>
<p><span style="font-weight: 400;">That means security teams are facing a harder problem: not just more traffic, but more uncertainty and adversaries with improved tools.</span></p>
<h2><b>What CISOs should be worried about</b></h2>
<p><span style="font-weight: 400;">The biggest risks are not always the loudest ones.</span></p>
<p><span style="font-weight: 400;">Whether it’s an over-permissioned agent, a forgotten or shadow API, or a “legitimate” request abused to enumerate data or chain unauthorized actions, the risk is real. It’s often compounded by API tokens with broad access and long expiration times.</span></p>
<p><span style="font-weight: 400;">These are the kinds of issues that can lead to evasive data exfiltration, unauthorized payments, compliance violations, and operational surprises that go undetected far too long.</span></p>
<p><span style="font-weight: 400;">If your API security program cannot spot abnormal behavior early, the business is exposed.</span></p>
<h2><b>What good looks like</b></h2>
<p><span style="font-weight: 400;">CISOs need a practical model, not more noise.</span></p>
<p><span style="font-weight: 400;">That model should:</span></p>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Continuously discover APIs across the environment.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Classify which ones are sensitive.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Establish baselines for normal behavior.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Detect abnormal or suspicious API activity.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Support least-privilege access for AI agents.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Help revoke risky permissions quickly.</span></li>
</ul>
<p><span style="font-weight: 400;">This is how security leaders turn AI agent activity from a blind spot into something measurable and governable.</span></p>
<h2><b>The board conversation has changed</b></h2>
<p><span style="font-weight: 400;">This is no longer just a technical issue for engineering or operations.</span></p>
<p><span style="font-weight: 400;">Boards care about risk, control, and business impact. They need to know how many AI agent-facing APIs are being monitored, how many anomalous calls have been detected, and how quickly the business can respond when something looks wrong.</span></p>
<p><span style="font-weight: 400;">That is the real opportunity for CISOs: to move API security into the center of the AI risk conversation.</span></p>
<h2><b>Download the guide now</b></h2>
<p><span style="font-weight: 400;">For CISOs, security leaders, and executives, this guide explains the new API security realities emerging with AI agents. We created </span><b><i>A CISO’s Guide to API Security in the Age of AI Agents</i></b> <span style="font-weight: 400;">to help you navigate the shift with clarity and confidence.</span></p>
<p><span style="font-weight: 400;">Inside, you will learn:</span></p>
<ul>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">Why AI agents are increasing API risk rather than replacing it.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">How to connect API security to business and board-level concerns.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">What to look for in a practical CISO playbook for discovery, visibility, and control.</span></li>
<li style="font-weight: 400;" aria-level="1"><span style="font-weight: 400;">How to govern agent-driven access before it becomes business exposure.</span></li>
</ul>
<p><span style="font-weight: 400;">AI agents may change how work gets done. But the organizations that understand their APIs first will be the ones best positioned to stay in control.</span></p>
<p><b><a href="https://www.imperva.com/resources/resource-library/reports/a-cisos-guide-to-api-security-in-the-age-of-ai-agents/">Download the CISO guide now</a></b></p>
<p>The post <a href="https://www.imperva.com/blog/why-ai-agents-make-api-security-a-ciso-priority/">Why AI Agents Make API Security a CISO Priority</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/why-ai-agents-make-api-security-a-ciso-priority/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<enclosure type="image/jpg" url="https://www.imperva.com/blog/wp-content/uploads/sites/9/2022/03/Modern-Database-Security-Solution-Cover-e1646919346226.png" length="845" />	</item>
		<item>
		<title>CVE-2026-23870: Imperva Customers Protected Against Critical React Server Components DoS Vulnerability</title>
		<link>https://www.imperva.com/blog/cve-2026-23870-imperva-customers-protected-against-critical-react-server-components-dos-vulnerability/</link>
					<comments>https://www.imperva.com/blog/cve-2026-23870-imperva-customers-protected-against-critical-react-server-components-dos-vulnerability/#respond</comments>
		
		<dc:creator><![CDATA[Gabi Sharadin]]></dc:creator>
		<pubDate>Sat, 09 May 2026 19:05:01 +0000</pubDate>
				<category><![CDATA[Imperva Threat Research]]></category>
		<guid isPermaLink="false">https://www.imperva.com/blog/?p=20917</guid>

					<description><![CDATA[<p>TL;DR: A newly disclosed denial-of-service vulnerability, CVE-2026-23870, impacts React Server Components and dependent frameworks, including Next.js App Router deployments. The flaw enables unauthenticated attackers to send specially crafted HTTP requests that trigger excessive CPU consumption during request deserialization, leading to potential service degradation or total unavailability. Imperva Threat Research Group has analyzed the vulnerability and associated [&#8230;]</p>
<p>The post <a href="https://www.imperva.com/blog/cve-2026-23870-imperva-customers-protected-against-critical-react-server-components-dos-vulnerability/">CVE-2026-23870: Imperva Customers Protected Against Critical React Server Components DoS Vulnerability</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>TL;DR: </em></strong><em>A newly disclosed denial-of-service vulnerability, CVE-2026-23870, impacts React Server Components and dependent frameworks, including Next.js App Router deployments. The flaw enables unauthenticated attackers to send specially crafted HTTP requests that trigger excessive CPU consumption during request deserialization, leading to potential service degradation or total unavailability. Imperva Threat Research Group has analyzed the vulnerability and associated attack patterns. Imperva Cloud WAF and On-Prem WAF customers are already protected against exploitation attempts targeting this issue.</em></p>
<h2>The Vulnerability</h2>
<p>Researchers recently disclosed <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-23870" target="_blank" rel="noopener">CVE-2026-23870</a>, a high-severity denial-of-service vulnerability affecting React Server Components and downstream frameworks such as Next.js. The issue exists in how vulnerable React Server Component implementations deserialize attacker-controlled request payloads sent to Server Function endpoints.</p>
<p>The vulnerability stems from improper handling of cyclic or recursively referenced data structures during request processing. Specifically, vulnerable deserialization logic within the React Flight protocol can repeatedly consume maliciously crafted models before properly marking them as processed, resulting in excessive resource consumption.</p>
<p>In practical terms, an attacker can send a specially crafted HTTP request to exposed Server Function endpoints in applications using React Server Components. When the payload is processed, the server enters a high-CPU execution state that can persist for extended periods before eventually throwing an error. Because the error is catchable and the attack requires no authentication, attackers can repeatedly issue malicious requests to sustain denial-of-service conditions.</p>
<p>The issue primarily impacts:</p>
<ul>
<li>react-server-dom-webpack</li>
<li>react-server-dom-parcel</li>
<li>react-server-dom-turbopack</li>
</ul>
<p>Affected versions include:</p>
<ul>
<li>0.0 through 19.0.4</li>
<li>1.0 through 19.1.5</li>
<li>2.0 through 19.2.4</li>
</ul>
<p>Patched releases are available in:</p>
<ul>
<li>0.5</li>
<li>1.6</li>
<li>2.5</li>
</ul>
<p>Because React Server Components are heavily used in modern application architectures, particularly high-traffic ecommerce, SaaS, and API-driven environments, exploitation can have significant operational impact. Applications leveraging Next.js App Router deployments are especially exposed due to the widespread use of Server Function endpoints.</p>
<p>Some of the techniques observed or associated with exploitation include:</p>
<ul>
<li>Crafted cyclic model payloads designed to trigger recursive deserialization behavior</li>
<li>Repeated requests to Server Function endpoints to sustain CPU exhaustion</li>
<li>Abuse of React Flight protocol request parsing logic</li>
<li>Application-layer denial-of-service attacks targeting availability rather than data theft</li>
<li>Automated scanning of exposed React and Next.js deployments for vulnerable endpoints</li>
</ul>
<p>Unlike traditional volumetric DDoS attacks, CVE-2026-23870 enables low-bandwidth, application-layer denial of service by forcing disproportionate server-side computation. This makes the attack particularly attractive because relatively small numbers of malicious requests can create significant backend resource exhaustion.</p>
<h2>Bottom Line</h2>
<p>CVE-2026-23870 highlights the growing security risks associated with modern server-side rendering frameworks and component-driven architectures. By abusing request deserialization logic in React Server Components, attackers can trigger disproportionate backend resource consumption using relatively low-effort HTTP requests.</p>
<p>Since this vulnerability requires no authentication and targets exposed Server Function endpoints directly, exploitation is straightforward in unpatched environments. Organizations using React Server Components, Next.js App Router, or related server-side rendering frameworks should immediately upgrade affected packages and review exposed application endpoints.</p>
<p>Imperva Cloud WAF and On-Prem WAF customers are protected against related attack activity.</p>
<p>The post <a href="https://www.imperva.com/blog/cve-2026-23870-imperva-customers-protected-against-critical-react-server-components-dos-vulnerability/">CVE-2026-23870: Imperva Customers Protected Against Critical React Server Components DoS Vulnerability</a> appeared first on <a href="https://www.imperva.com/blog">Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.imperva.com/blog/cve-2026-23870-imperva-customers-protected-against-critical-react-server-components-dos-vulnerability/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
