<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>dwell time</title><description>the gap before anyone notices</description><link>https://dwell-time.pages.dev/</link><item><title>Slopsquatting: when your AI coding assistant invents a vulnerability</title><link>https://dwell-time.pages.dev/posts/slopsquatting/</link><guid isPermaLink="true">https://dwell-time.pages.dev/posts/slopsquatting/</guid><description>the new attack surface is the same as the old one, just running faster</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Placeholder body — replace with the real article. This draft exists only so
every styled element renders on first boot.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Large language models hallucinate package names. A developer asks for an import,
the model confidently returns one that does not exist, and an attacker registers
it before anyone notices. The exploit is old. The throughput is new.&lt;/p&gt;
&lt;h2 id=&quot;the-mechanism&quot;&gt;the mechanism&lt;/h2&gt;
&lt;p&gt;The model does not know which packages are real. It predicts plausible strings,
and a plausible string is exactly what a squatter needs to anticipate.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The supply chain didn’t get a new weakness. It got a new, tireless author of
typos — one that ships the same mistake to thousands of repos before lunch.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Three things make this worse than classic typosquatting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the suggestion arrives inside the editor, where trust is already high&lt;/li&gt;
&lt;li&gt;the same hallucinated name recurs across many users and sessions&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;nobody typed it, so nobody feels responsible for checking it&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-actually-changes&quot;&gt;what actually changes&lt;/h2&gt;
&lt;p&gt;Here is the part the hype gets wrong: the defense is not new either. Pin
versions, verify provenance, and treat generated imports as untrusted input —
the same hygiene that predates the model.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ npm install requests-py
npm warn  package not found in registry mirror
npm error this name was suggested by an assistant, not by you
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The fix is boring. Boring is the point.&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;Determinism in the failure mode is what turns a one-off mistake into a
reliable target. The attacker only needs the model to be consistently wrong. &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item></channel></rss>