<?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>Mon, 05 Oct 2026 14:04:14 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-338468</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-338468</link>
      <description>EUVD-2026-338468</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-338468</guid>
    </item>
    <item>
      <title>fkie_cve-2026-46341</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-46341</link>
      <description>&lt;p&gt;The Apify MCP server enables AI agents to extract data from websites using ready-made scrapers, crawlers, and automation tools available on the Apify Store. Prior to 0.9.21, the fetch-apify-docs tool in src/tools/common/fetch_apify_docs.ts validates allowlisted documentation domains with String.startsWith() rather than URL hostname comparison, allowing attacker-controlled URLs such as `https://docs.apify.com.evil.com/` and `https://docs.apify.com@evil.com/` to pass the ALLOWED_DOC_DOMAINS check and return arbitrary fetched content to the LLM. This issue is fixed in version 0.9.21.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;The Apify MCP server enables AI agents to extract data from websites using ready-made scrapers, crawlers, and automation tools available on the Apify Store. Prior to 0.9.21, the fetch-apify-docs tool in src/tools/common/fetch_apify_docs.ts validates allowlisted documentation domains with String.startsWith() rather than URL hostname comparison, allowing attacker-controlled URLs such as `https://docs.apify.com.evil.com/` and `https://docs.apify.com@evil.com/` to pass the ALLOWED_DOC_DOMAINS check and return arbitrary fetched content to the LLM. This issue is fixed in version 0.9.21.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-46341</guid>
    </item>
    <item>
      <title>GHSA-jwp7-wg77-3w9v — Apify Model Context Protocol (MCP) server: Domain Allowlist Bypass in fetch-apify-docs via String Prefix Matching</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-jwp7-wg77-3w9v</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @apify/actors-mcp-server&lt;/p&gt;
&lt;p&gt;### Summary
The `fetch-apify-docs` tool validates URLs against a domain allowlist using `String.startsWith()` instead of proper URL hostname comparison. This allows bypass via attacker-controlled subdomains (e.g., `https://docs.apify.com.evil.com/`), enabling the tool to fetch and return arbitrary web content to the LLM.&lt;/p&gt;
&lt;p&gt;### Details
#### Vulnerable component&lt;/p&gt;
&lt;p&gt;`src/tools/common/fetch_apify_docs.ts`, line 51:&lt;/p&gt;
&lt;p&gt;```typescript
const isAllowedDomain = ALLOWED_DOC_DOMAINS.some((domain) =&amp;gt; url.startsWith(domain));
```&lt;/p&gt;
&lt;p&gt;`src/const.ts`, lines 167-170:&lt;/p&gt;
&lt;p&gt;```typescript
export const ALLOWED_DOC_DOMAINS = [
    &amp;#39;https://docs.apify.com&amp;#39;,
    &amp;#39;https://crawlee.dev&amp;#39;,
] as const;
```&lt;/p&gt;
&lt;p&gt;#### How the bypass works&lt;/p&gt;
&lt;p&gt;`String.startsWith(&amp;#39;https://docs.apify.com&amp;#39;)` matches any string beginning with that prefix, including:&lt;/p&gt;
&lt;p&gt;- `https://docs.apify.com.evil.com/payload` - attacker-controlled subdomain
- `https://docs.apify.com@evil.com/payload` - userinfo component in URL (browser behavior varies, but `fetch()` in Node.js may follow this)
- `https://docs.apify.com.evil.com:8080/path` - custom port on attacker domain&lt;/p&gt;
&lt;p&gt;All of these pass the `startsWith` check because they begin with the exact string `https://docs.apify.com`.&lt;/p&gt;
&lt;p&gt;#### The fetched content is returned to the LLM&lt;/p&gt;
&lt;p&gt;After the allowlist check passes, the tool fetches the URL and returns the full page content as markdown (`fetch_apify_docs.ts:69-103`):&lt;/p&gt;
&lt;p&gt;```typescript
const response = await fetch(url);
// ...
const html = await response.text();
markdown…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @apify/actors-mcp-server&lt;/p&gt;
&lt;p&gt;### Summary
The `fetch-apify-docs` tool validates URLs against a domain allowlist using `String.startsWith()` instead of proper URL hostname comparison. This allows bypass via attacker-controlled subdomains (e.g., `https://docs.apify.com.evil.com/`), enabling the tool to fetch and return arbitrary web content to the LLM.&lt;/p&gt;
&lt;p&gt;### Details
#### Vulnerable component&lt;/p&gt;
&lt;p&gt;`src/tools/common/fetch_apify_docs.ts`, line 51:&lt;/p&gt;
&lt;p&gt;```typescript
const isAllowedDomain = ALLOWED_DOC_DOMAINS.some((domain) =&amp;gt; url.startsWith(domain));
```&lt;/p&gt;
&lt;p&gt;`src/const.ts`, lines 167-170:&lt;/p&gt;
&lt;p&gt;```typescript
export const ALLOWED_DOC_DOMAINS = [
    &amp;#39;https://docs.apify.com&amp;#39;,
    &amp;#39;https://crawlee.dev&amp;#39;,
] as const;
```&lt;/p&gt;
&lt;p&gt;#### How the bypass works&lt;/p&gt;
&lt;p&gt;`String.startsWith(&amp;#39;https://docs.apify.com&amp;#39;)` matches any string beginning with that prefix, including:&lt;/p&gt;
&lt;p&gt;- `https://docs.apify.com.evil.com/payload` - attacker-controlled subdomain
- `https://docs.apify.com@evil.com/payload` - userinfo component in URL (browser behavior varies, but `fetch()` in Node.js may follow this)
- `https://docs.apify.com.evil.com:8080/path` - custom port on attacker domain&lt;/p&gt;
&lt;p&gt;All of these pass the `startsWith` check because they begin with the exact string `https://docs.apify.com`.&lt;/p&gt;
&lt;p&gt;#### The fetched content is returned to the LLM&lt;/p&gt;
&lt;p&gt;After the allowlist check passes, the tool fetches the URL and returns the full page content as markdown (`fetch_apify_docs.ts:69-103`):&lt;/p&gt;
&lt;p&gt;```typescript
const response = await fetch(url);
// ...
const html = await response.text();
markdown…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-jwp7-wg77-3w9v</guid>
    </item>
  </channel>
</rss>
