<?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>Fri, 02 Oct 2026 04:24:37 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-54635</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-54635</link>
      <description>&lt;p&gt;pytonapi is a Python SDK for TONAPI that provides REST API, streaming, and webhook access to the TON blockchain. From 2.0.0 to 2.2.0, TonapiWebhookDispatcher fails to validate the Authorization header when a webhook handler is registered with the documented path argument, because setup() stores bearer tokens only under the default suffix paths and never adds the custom path to the token map, so self._tokens.get(path) returns None and the authentication guard is skipped. An unauthenticated remote attacker can POST forged payloads to the custom webhook endpoint and trigger victim-defined handlers. This issue is fixed in version 2.2.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;pytonapi is a Python SDK for TONAPI that provides REST API, streaming, and webhook access to the TON blockchain. From 2.0.0 to 2.2.0, TonapiWebhookDispatcher fails to validate the Authorization header when a webhook handler is registered with the documented path argument, because setup() stores bearer tokens only under the default suffix paths and never adds the custom path to the token map, so self._tokens.get(path) returns None and the authentication guard is skipped. An unauthenticated remote attacker can POST forged payloads to the custom webhook endpoint and trigger victim-defined handlers. This issue is fixed in version 2.2.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-54635</guid>
    </item>
    <item>
      <title>GHSA-3fcr-jvgp-7f58 — pytonapi has a Webhook Custom Path Authentication Bypass</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-3fcr-jvgp-7f58</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pytonapi&lt;/p&gt;
&lt;p&gt;## Webhook Custom Path Authentication Bypass in pytonapi&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`TonapiWebhookDispatcher` in pytonapi 2.2.0 fails to validate the `Authorization` header when a webhook handler is registered with the documented `path=` argument. During `setup()`, bearer tokens are stored only under the default suffix paths (e.g., `/hook/account-tx`), but the custom path (e.g., `/hook/custom`) is never added to the token map. When an incoming request arrives at the custom path, `self._tokens.get(path)` returns `None`, causing the `if expected_token is not None` guard to evaluate to `False` and silently skip authentication entirely. An unauthenticated remote attacker can POST arbitrary forged payloads to the custom webhook endpoint and trigger victim-defined handlers with full integrity impact.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The vulnerability is a fail-open authentication check in `pytonapi/webhook/dispatcher.py`.&lt;/p&gt;
&lt;p&gt;**Token registration (setup)** stores tokens only under default suffix paths:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 109-112
suffix = self.DEFAULT_SUFFIXES[event_type]
local_path = self._path + suffix          # e.g., &amp;#34;/hook/account-tx&amp;#34;
webhook = await self._client.ensure(f&amp;#34;{self._url}{suffix}&amp;#34;)
self._tokens[local_path] = webhook.token  # custom path is NEVER stored here
```&lt;/p&gt;
&lt;p&gt;**Handler registration** preserves the custom path in the handler tuple:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 339, 342
resolved_path = path or self._resolve_path(event_type)  # -&amp;gt; &amp;#34;/hook/custom&amp;#34;
self._handlers[event_type].append((a…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pytonapi&lt;/p&gt;
&lt;p&gt;## Webhook Custom Path Authentication Bypass in pytonapi&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`TonapiWebhookDispatcher` in pytonapi 2.2.0 fails to validate the `Authorization` header when a webhook handler is registered with the documented `path=` argument. During `setup()`, bearer tokens are stored only under the default suffix paths (e.g., `/hook/account-tx`), but the custom path (e.g., `/hook/custom`) is never added to the token map. When an incoming request arrives at the custom path, `self._tokens.get(path)` returns `None`, causing the `if expected_token is not None` guard to evaluate to `False` and silently skip authentication entirely. An unauthenticated remote attacker can POST arbitrary forged payloads to the custom webhook endpoint and trigger victim-defined handlers with full integrity impact.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The vulnerability is a fail-open authentication check in `pytonapi/webhook/dispatcher.py`.&lt;/p&gt;
&lt;p&gt;**Token registration (setup)** stores tokens only under default suffix paths:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 109-112
suffix = self.DEFAULT_SUFFIXES[event_type]
local_path = self._path + suffix          # e.g., &amp;#34;/hook/account-tx&amp;#34;
webhook = await self._client.ensure(f&amp;#34;{self._url}{suffix}&amp;#34;)
self._tokens[local_path] = webhook.token  # custom path is NEVER stored here
```&lt;/p&gt;
&lt;p&gt;**Handler registration** preserves the custom path in the handler tuple:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 339, 342
resolved_path = path or self._resolve_path(event_type)  # -&amp;gt; &amp;#34;/hook/custom&amp;#34;
self._handlers[event_type].append((a…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-3fcr-jvgp-7f58</guid>
    </item>
    <item>
      <title>PYSEC-2026-3614 — pytonapi has a Webhook Custom Path Authentication Bypass</title>
      <link>https://vulnerability.circl.lu/vuln/pysec-2026-3614</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pytonapi&lt;/p&gt;
&lt;p&gt;## Webhook Custom Path Authentication Bypass in pytonapi&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`TonapiWebhookDispatcher` in pytonapi 2.2.0 fails to validate the `Authorization` header when a webhook handler is registered with the documented `path=` argument. During `setup()`, bearer tokens are stored only under the default suffix paths (e.g., `/hook/account-tx`), but the custom path (e.g., `/hook/custom`) is never added to the token map. When an incoming request arrives at the custom path, `self._tokens.get(path)` returns `None`, causing the `if expected_token is not None` guard to evaluate to `False` and silently skip authentication entirely. An unauthenticated remote attacker can POST arbitrary forged payloads to the custom webhook endpoint and trigger victim-defined handlers with full integrity impact.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The vulnerability is a fail-open authentication check in `pytonapi/webhook/dispatcher.py`.&lt;/p&gt;
&lt;p&gt;**Token registration (setup)** stores tokens only under default suffix paths:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 109-112
suffix = self.DEFAULT_SUFFIXES[event_type]
local_path = self._path + suffix          # e.g., &amp;#34;/hook/account-tx&amp;#34;
webhook = await self._client.ensure(f&amp;#34;{self._url}{suffix}&amp;#34;)
self._tokens[local_path] = webhook.token  # custom path is NEVER stored here
```&lt;/p&gt;
&lt;p&gt;**Handler registration** preserves the custom path in the handler tuple:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 339, 342
resolved_path = path or self._resolve_path(event_type)  # -&amp;gt; &amp;#34;/hook/custom&amp;#34;
self._handlers[event_type].append((a…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pytonapi&lt;/p&gt;
&lt;p&gt;## Webhook Custom Path Authentication Bypass in pytonapi&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`TonapiWebhookDispatcher` in pytonapi 2.2.0 fails to validate the `Authorization` header when a webhook handler is registered with the documented `path=` argument. During `setup()`, bearer tokens are stored only under the default suffix paths (e.g., `/hook/account-tx`), but the custom path (e.g., `/hook/custom`) is never added to the token map. When an incoming request arrives at the custom path, `self._tokens.get(path)` returns `None`, causing the `if expected_token is not None` guard to evaluate to `False` and silently skip authentication entirely. An unauthenticated remote attacker can POST arbitrary forged payloads to the custom webhook endpoint and trigger victim-defined handlers with full integrity impact.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The vulnerability is a fail-open authentication check in `pytonapi/webhook/dispatcher.py`.&lt;/p&gt;
&lt;p&gt;**Token registration (setup)** stores tokens only under default suffix paths:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 109-112
suffix = self.DEFAULT_SUFFIXES[event_type]
local_path = self._path + suffix          # e.g., &amp;#34;/hook/account-tx&amp;#34;
webhook = await self._client.ensure(f&amp;#34;{self._url}{suffix}&amp;#34;)
self._tokens[local_path] = webhook.token  # custom path is NEVER stored here
```&lt;/p&gt;
&lt;p&gt;**Handler registration** preserves the custom path in the handler tuple:&lt;/p&gt;
&lt;p&gt;```python
# dispatcher.py lines 339, 342
resolved_path = path or self._resolve_path(event_type)  # -&amp;gt; &amp;#34;/hook/custom&amp;#34;
self._handlers[event_type].append((a…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/pysec-2026-3614</guid>
    </item>
  </channel>
</rss>
