pypi package report

Is crossbar safe?

1 known vulnerability, worst severity MODERATE.

// reach

0 direct dependencies

none carry a known advisory

    0 packages depend on it

    an advisory here reaches each of them

      Create a free accountfor every dependency path, dependent and what to upgrade
      // ai model usage

      No published models are known to use this package.


      cvss
      0.0
      medium

      severity out of 10

      epss
      0.00%
      medium

      chance of exploitation in 30 days, 34th percentile of all CVEs

      xyz score
      not scored

      CyberXYZ composite out of 10

      fig. 01 — GHSA-hxp9-w8x3-p566, the advisory selected below

      // 1 advisories

      GHSA-hxp9-w8x3-p566

      MODERATECVE-2026-77528
      // summary

      Autobahn Python enforces maxMessagePayloadSize against the compressed WebSocket frame length before permessage-deflate inflation, then delivers the inflated message to application callbacks without a second size check. A client frame that is only 22 compressed bytes can inflate to 4096 bytes and reach onMessage even when the application configured a 128-byte message limit, defeating the resource boundary the option is meant to provide.

      // details

      The permessage-deflate path installs a PerMessageDeflate instance when the server accepts a client offer in src/autobahn/websocket/protocol.py:3371. The common PerMessageDeflateOfferAccept(offer) path leaves maxmessagesize at its default None in src/autobahn/websocket/compressdeflate.py:295, and that value is copied into the compressor object in src/autobahn/websocket/compressdeflate.py:723. When a data frame arrives with RSV1 set, Autobahn marks the message compressed in src/autobahn/websocket/protocol.py:1812, calls onMessageFrameBegin with the compressed frame length, and increments messagedatatotallength by that pre-inflate length in src/autobahn/websocket/protocol.py:634; the configured message cap is enforced against the same compressed accounting at src/autobahn/websocket/protocol.py:636. Only after those checks does Autobahn inflate the payload in src/autobahn/websocket/protocol.py:1861; because maxmessagesize is None, src/autobahn/websocket/compressdeflate.py:812 calls zlib without an output cap. The inflated bytes are then passed to onMessageFrameData in src/autobahn/websocket/protocol.py:1882, appended for WebSocket version 13 without adding their inflated length to the message counter at src/autobahn/websocket/protocol.py:667, joined in src/autobahn/websocket/protocol.py:690, and delivered through onMessage in src/autobahn/websocket/protocol.py:693. This is the same structural boundary mistake as CVE-2016-10544: a compressed-size check is treated as if it bounded the decompressed application message.

      // reproduction
      import sys
      import types
      import zlib
      
      
      if len(sys.argv) != 2:
          raise SystemExit("usage: autobahn_deflate_limit_poc.py ")
      
      SRC = sys.argv[1]
      
      
      class _Log:
          def debug(self, *args, **kwargs):
              pass
      
          def warn(self, *args, **kwargs):
              pass
      
          def error(self, *args, **kwargs):
              pass
      
      
      class _Timer:
          def call_later(self, *args, **kwargs):
              return self
      
          def cancel(self):
              pass
      
      
      txaio = types.ModuleType("txaio")
      txaio.make_logger = lambda: _Log()
      txaio.create_future = lambda result=None: result
      txaio.resolve = lambda future, value=None: None
      txaio.reject = lambda future, error=None: None
      txaio.add_callbacks = (
          lambda future, callback=None, errback=None: callback(future) if callback else None
      )
      txaio.as_future = lambda fn, *args, **kwargs: fn(*args, **kwargs)
      txaio.failure_format_traceback = lambda err: str(err)
      txaio.call_later = lambda *args, **kwargs: _Timer()
      txaio.make_batched_timer = lambda *args, **kwargs: _Timer()
      txaio.time_ns = lambda: 0
      txaio.use_asyncio = lambda: None
      txaio.use_twisted = lambda: None
      sys.modules["txaio"] = txaio
      
      hyperlink = types.ModuleType("hyperlink")
      
      
      class _URL:
          @classmethod
          def from_text(cls, text):
              return cls(text)
      
          def __init__(self, text):
              self._text = text
      
          def to_uri(self):
              return self
      
          def normalize(self):
              return self
      
          def to_text(self):
              return self._text
      
      
      hyperlink.URL = _URL
      sys.modules["hyperlink"] = hyperlink
      
      wamp_types = types.ModuleType("autobahn.wamp.types")
      
      
      class TransportDetails:
          pass
      
      
      wamp_types.TransportDetails = TransportDetails
      sys.modules["autobahn.wamp.types"] = wamp_types
      
      sys.path.insert(0, SRC + "/src")
      
      from autobahn.websocket.compress_deflate import PerMessageDeflate
      from autobahn.websocket.protocol import WebSocketProtocol
      
      
      class _Factory:
          isServer = True
          requireMaskedClientFrames = True
          maskServerFrames = False
          utf8validateIncoming = True
          applyMask = True
          max
      // impact

      A remote unauthenticated WebSocket client can exercise this when the target endpoint accepts permessage-deflate offers and relies on maxMessagePayloadSize as its per-message resource limit. The attack sends a valid masked compressed text or data frame with RSV1 set and a compressed length below the configured frame/message caps; those pre-inflate checks pass, and the default accept-object path also bypasses the optional inflater-level maxmessagesize cap because it remains None. The user-visible effect is that application handlers may allocate, validate, join, and process inflated messages larger than the configured limit, enabling resource-exhaustion pressure on affected permessage-deflate endpoints. The local artifact demonstrates availability impact only, not confidentiality or integrity compromise.

      // cvss v3.1 vector

      CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

      Attack vector
      Network
      Attack complexity
      Low
      Privileges required
      None
      User interaction
      None
      Scope
      Unchanged
      Confidentiality
      None
      Integrity
      None
      Availability
      Low

      Checked 2026-09-22 at 22:29 UTC. The most recent advisory here was published 2026-09-22. Updated continuously from NVD, GHSA, OSV and CNA feeds.

      Think a verdict here is wrong? Tell us — we respond within 2 business days.
      Is crossbar safe? pypi package security report | CyberXYZ