<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 15:17:02 +0000</lastBuildDate>
    <item>
      <title>CVE-2025-62800 — FastMCP vulnerable to reflected XSS in client's callback page</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2025-62800</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jlowin fastmcp&lt;/p&gt;
&lt;p&gt;FastMCP is the standard framework for building MCP applications. Versions prior to 2.13.0 have a reflected cross-site scripting vulnerability in the OAuth client callback page (oauth_callback.py) where unescaped user-controlled values are inserted into the generated HTML, allowing arbitrary JavaScript execution in the callback server origin. The issue is fixed in version 2.13.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jlowin fastmcp&lt;/p&gt;
&lt;p&gt;FastMCP is the standard framework for building MCP applications. Versions prior to 2.13.0 have a reflected cross-site scripting vulnerability in the OAuth client callback page (oauth_callback.py) where unescaped user-controlled values are inserted into the generated HTML, allowing arbitrary JavaScript execution in the callback server origin. The issue is fixed in version 2.13.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2025-62800</guid>
    </item>
    <item>
      <title>GHSA-mxxr-jv3v-6pgc — FastMCP vulnerable to reflected XSS in client's callback page</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-mxxr-jv3v-6pgc</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: fastmcp&lt;/p&gt;
&lt;p&gt;### Summary
While setting up an oauth client, it was noticed that the callback page hosted by the client during the flow embeds user-controlled content without escaping or sanitizing it. This leads to a reflected Cross-Site-Scripting vulnerability.&lt;/p&gt;
&lt;p&gt;### Details
The affected code is located in *https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/oauth_callback.py*, which embeds all values passed to the `create_callback_html` function via the `message` parameter it into the callback page without escaping them. This can, for example, be abused by calling the callback server with an XSS payload inside the `error` GET parameter, the value of which will then be inserted into the callback page, causing the execution of attacker-controlled JavaScript code in the callback server&amp;#39;s origin. Note that besides the `error` parameter, other parameters reaching this function are affected too.&lt;/p&gt;
&lt;p&gt;### PoC
1. Setup a simple fastmcp client such as this one (the callback server&amp;#39;s port was fixated for simplicity):&lt;/p&gt;
&lt;p&gt;```
url=&amp;#34;http://127.0.0.1:8000/mcp&amp;#34;
oauth = OAuth(mcp_url=url,callback_port=1337)&lt;/p&gt;
&lt;p&gt;async def main():
    async with Client(url, auth=oauth) as client:
        await client.ping()
        
        # List available operations
        tools = await client.list_tools()&lt;/p&gt;
&lt;p&gt;print(f&amp;#34;tools: {tools}&amp;#34;)
       
asyncio.run(main())
```&lt;/p&gt;
&lt;p&gt;2. Ensure that the MCP server located at `http://127.0.0.1:8000/mcp` supports oauth.
3. Start the client.
4. As soon as the callback server has been…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: fastmcp&lt;/p&gt;
&lt;p&gt;### Summary
While setting up an oauth client, it was noticed that the callback page hosted by the client during the flow embeds user-controlled content without escaping or sanitizing it. This leads to a reflected Cross-Site-Scripting vulnerability.&lt;/p&gt;
&lt;p&gt;### Details
The affected code is located in *https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/oauth_callback.py*, which embeds all values passed to the `create_callback_html` function via the `message` parameter it into the callback page without escaping them. This can, for example, be abused by calling the callback server with an XSS payload inside the `error` GET parameter, the value of which will then be inserted into the callback page, causing the execution of attacker-controlled JavaScript code in the callback server&amp;#39;s origin. Note that besides the `error` parameter, other parameters reaching this function are affected too.&lt;/p&gt;
&lt;p&gt;### PoC
1. Setup a simple fastmcp client such as this one (the callback server&amp;#39;s port was fixated for simplicity):&lt;/p&gt;
&lt;p&gt;```
url=&amp;#34;http://127.0.0.1:8000/mcp&amp;#34;
oauth = OAuth(mcp_url=url,callback_port=1337)&lt;/p&gt;
&lt;p&gt;async def main():
    async with Client(url, auth=oauth) as client:
        await client.ping()
        
        # List available operations
        tools = await client.list_tools()&lt;/p&gt;
&lt;p&gt;print(f&amp;#34;tools: {tools}&amp;#34;)
       
asyncio.run(main())
```&lt;/p&gt;
&lt;p&gt;2. Ensure that the MCP server located at `http://127.0.0.1:8000/mcp` supports oauth.
3. Start the client.
4. As soon as the callback server has been…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-mxxr-jv3v-6pgc</guid>
    </item>
    <item>
      <title>PYSEC-2026-1364 — FastMCP vulnerable to reflected XSS in client's callback page</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-1364</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: fastmcp&lt;/p&gt;
&lt;p&gt;### Summary
While setting up an oauth client, it was noticed that the callback page hosted by the client during the flow embeds user-controlled content without escaping or sanitizing it. This leads to a reflected Cross-Site-Scripting vulnerability.&lt;/p&gt;
&lt;p&gt;### Details
The affected code is located in *https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/oauth_callback.py*, which embeds all values passed to the `create_callback_html` function via the `message` parameter it into the callback page without escaping them. This can, for example, be abused by calling the callback server with an XSS payload inside the `error` GET parameter, the value of which will then be inserted into the callback page, causing the execution of attacker-controlled JavaScript code in the callback server&amp;#39;s origin. Note that besides the `error` parameter, other parameters reaching this function are affected too.&lt;/p&gt;
&lt;p&gt;### PoC
1. Setup a simple fastmcp client such as this one (the callback server&amp;#39;s port was fixated for simplicity):&lt;/p&gt;
&lt;p&gt;```
url=&amp;#34;http://127.0.0.1:8000/mcp&amp;#34;
oauth = OAuth(mcp_url=url,callback_port=1337)&lt;/p&gt;
&lt;p&gt;async def main():
    async with Client(url, auth=oauth) as client:
        await client.ping()
        
        # List available operations
        tools = await client.list_tools()&lt;/p&gt;
&lt;p&gt;print(f&amp;#34;tools: {tools}&amp;#34;)
       
asyncio.run(main())
```&lt;/p&gt;
&lt;p&gt;2. Ensure that the MCP server located at `http://127.0.0.1:8000/mcp` supports oauth.
3. Start the client.
4. As soon as the callback server has been…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: fastmcp&lt;/p&gt;
&lt;p&gt;### Summary
While setting up an oauth client, it was noticed that the callback page hosted by the client during the flow embeds user-controlled content without escaping or sanitizing it. This leads to a reflected Cross-Site-Scripting vulnerability.&lt;/p&gt;
&lt;p&gt;### Details
The affected code is located in *https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/oauth_callback.py*, which embeds all values passed to the `create_callback_html` function via the `message` parameter it into the callback page without escaping them. This can, for example, be abused by calling the callback server with an XSS payload inside the `error` GET parameter, the value of which will then be inserted into the callback page, causing the execution of attacker-controlled JavaScript code in the callback server&amp;#39;s origin. Note that besides the `error` parameter, other parameters reaching this function are affected too.&lt;/p&gt;
&lt;p&gt;### PoC
1. Setup a simple fastmcp client such as this one (the callback server&amp;#39;s port was fixated for simplicity):&lt;/p&gt;
&lt;p&gt;```
url=&amp;#34;http://127.0.0.1:8000/mcp&amp;#34;
oauth = OAuth(mcp_url=url,callback_port=1337)&lt;/p&gt;
&lt;p&gt;async def main():
    async with Client(url, auth=oauth) as client:
        await client.ping()
        
        # List available operations
        tools = await client.list_tools()&lt;/p&gt;
&lt;p&gt;print(f&amp;#34;tools: {tools}&amp;#34;)
       
asyncio.run(main())
```&lt;/p&gt;
&lt;p&gt;2. Ensure that the MCP server located at `http://127.0.0.1:8000/mcp` supports oauth.
3. Start the client.
4. As soon as the callback server has been…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-1364</guid>
    </item>
  </channel>
</rss>
