<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://cve.radiocsirt.org</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 06 Oct 2026 08:26:54 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-342832</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-342832</link>
      <description>EUVD-2026-342832</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-342832</guid>
    </item>
    <item>
      <title>fkie_cve-2026-54722</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-54722</link>
      <description>&lt;p&gt;DSSRF is a Node.js library that provides a wide range of utilities and advanced SSRF defense checks. Prior to 1.0.4, is_url_safe in src/helpers.ts strips the @ userinfo delimiter with remove_at_symbol_in_string before new URL parses the URL, allowing an attacker-controlled URL to bypass internal-IP validation and cause a client using the original URL to reach an internal service. This issue is fixed in version 1.0.4.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;DSSRF is a Node.js library that provides a wide range of utilities and advanced SSRF defense checks. Prior to 1.0.4, is_url_safe in src/helpers.ts strips the @ userinfo delimiter with remove_at_symbol_in_string before new URL parses the URL, allowing an attacker-controlled URL to bypass internal-IP validation and cause a client using the original URL to reach an internal service. This issue is fixed in version 1.0.4.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-54722</guid>
    </item>
    <item>
      <title>GHSA-cg4g-m8jx-vjv2 — dssrf has an SSRF bypass with remove_at_symbol_in_string</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-cg4g-m8jx-vjv2</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: dssrf&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`is_url_safe` in v1.0.3 contains an SSRF bypass. `remove_at_symbol_in_string` is applied to the raw URL string **before** `new URL()` parses it. This strips the `@` that separates userinfo from host, corrupting the hostname so internal IPs are never checked.&lt;/p&gt;
&lt;p&gt;## Vulnerability&lt;/p&gt;
&lt;p&gt;In `helpers.ts`, `is_url_safe` does:&lt;/p&gt;
&lt;p&gt;```ts
u = remove_at_symbol_in_string(u);   // strips ALL &amp;#39;@&amp;#39; from the raw string
// ...
const parsed = new URL(u);
const hostname = parsed.hostname;    // resolved from the corrupted string
```&lt;/p&gt;
&lt;p&gt;### What happens step by step&lt;/p&gt;
&lt;p&gt;Input: `http://evil.com@127.0.0.1/`&lt;/p&gt;
&lt;p&gt;1. `remove_at_symbol_in_string` → `http://evil.com127.0.0.1/`
2. `new URL(...)` → `hostname = &amp;#34;evil.com127.0.0.1&amp;#34;`
3. Not a bare IP, not IPv6 → passes all IP checks
4. `is_hostname_resolve_to_internal_ip(&amp;#34;evil.com127.0.0.1&amp;#34;)` → NXDOMAIN → returns false
5. **Result: `true` (safe)** — but any HTTP client using the *original* URL connects to `127.0.0.1`&lt;/p&gt;
&lt;p&gt;### Proof of Concept&lt;/p&gt;
&lt;p&gt;```js
import nock from &amp;#39;nock&amp;#39;;
import { got } from &amp;#39;got&amp;#39;;
import { is_url_safe } from &amp;#39;dssrf&amp;#39;;&lt;/p&gt;
&lt;p&gt;// Simulate an internal server at 10.0.0.1 that returns secret data
nock(&amp;#39;http://10.0.0.1:80&amp;#39;).persist().get(&amp;#39;/&amp;#39;).reply(200, &amp;#39;SECRET_DATA&amp;#39;);&lt;/p&gt;
&lt;p&gt;const BYPASS_URL = &amp;#39;http://2@10.0.0.1/&amp;#39;;
const PLAIN_URL  = &amp;#39;http://10.0.0.1/&amp;#39;;&lt;/p&gt;
&lt;p&gt;// dssrf should block both — it only blocks the plain one
console.log(&amp;#39;--- dssrf validator ---&amp;#39;);
console.log(`is_url_safe(&amp;#39;${PLAIN_URL}&amp;#39;)   =`, await is_url_safe(PLAIN_URL),  &amp;#39;← correctly blocked&amp;#39;);
console.log(`…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: dssrf&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`is_url_safe` in v1.0.3 contains an SSRF bypass. `remove_at_symbol_in_string` is applied to the raw URL string **before** `new URL()` parses it. This strips the `@` that separates userinfo from host, corrupting the hostname so internal IPs are never checked.&lt;/p&gt;
&lt;p&gt;## Vulnerability&lt;/p&gt;
&lt;p&gt;In `helpers.ts`, `is_url_safe` does:&lt;/p&gt;
&lt;p&gt;```ts
u = remove_at_symbol_in_string(u);   // strips ALL &amp;#39;@&amp;#39; from the raw string
// ...
const parsed = new URL(u);
const hostname = parsed.hostname;    // resolved from the corrupted string
```&lt;/p&gt;
&lt;p&gt;### What happens step by step&lt;/p&gt;
&lt;p&gt;Input: `http://evil.com@127.0.0.1/`&lt;/p&gt;
&lt;p&gt;1. `remove_at_symbol_in_string` → `http://evil.com127.0.0.1/`
2. `new URL(...)` → `hostname = &amp;#34;evil.com127.0.0.1&amp;#34;`
3. Not a bare IP, not IPv6 → passes all IP checks
4. `is_hostname_resolve_to_internal_ip(&amp;#34;evil.com127.0.0.1&amp;#34;)` → NXDOMAIN → returns false
5. **Result: `true` (safe)** — but any HTTP client using the *original* URL connects to `127.0.0.1`&lt;/p&gt;
&lt;p&gt;### Proof of Concept&lt;/p&gt;
&lt;p&gt;```js
import nock from &amp;#39;nock&amp;#39;;
import { got } from &amp;#39;got&amp;#39;;
import { is_url_safe } from &amp;#39;dssrf&amp;#39;;&lt;/p&gt;
&lt;p&gt;// Simulate an internal server at 10.0.0.1 that returns secret data
nock(&amp;#39;http://10.0.0.1:80&amp;#39;).persist().get(&amp;#39;/&amp;#39;).reply(200, &amp;#39;SECRET_DATA&amp;#39;);&lt;/p&gt;
&lt;p&gt;const BYPASS_URL = &amp;#39;http://2@10.0.0.1/&amp;#39;;
const PLAIN_URL  = &amp;#39;http://10.0.0.1/&amp;#39;;&lt;/p&gt;
&lt;p&gt;// dssrf should block both — it only blocks the plain one
console.log(&amp;#39;--- dssrf validator ---&amp;#39;);
console.log(`is_url_safe(&amp;#39;${PLAIN_URL}&amp;#39;)   =`, await is_url_safe(PLAIN_URL),  &amp;#39;← correctly blocked&amp;#39;);
console.log(`…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-cg4g-m8jx-vjv2</guid>
    </item>
  </channel>
</rss>
