T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/callback_server.py:177- Finding
Network-Exposed Callback Server Allows Unauthenticated AK Replacement and Shutdown
- Content
View full analysis
None: """Linux/macOS:单 AF_INET6 dual-stack socket,IPV6_V6ONLY=0 同时接受 IPv4/IPv6。 必须在 server_bind() 之前设置 IPV6_V6ONLY,故使用 bind_and_activate=False 延迟绑定。 """ self._server.server_close() self._server = _ThreadingHTTPServerIPv6(("::", port), handler, bind_and_activate=False) self._server.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) self._server.server_bind() self._server.server_activate() self._thread = threading.Thread( target=self._server.serve_forever, daemon=False, name="oauth-callback-server", ) self._thread.start() logger.debug("Unix: dual-stack 回调服务器启动在 [::]:%d(同时接受 IPv4/IPv6)", port) ``` The credential-saving endpoint permits requests with no `Origin` header and does not require the generated OAuth state or another secret: ```python def _handle_save_ak(self): origin = self.headers.get("Origin", "") allowed = f"http://localhost:{server_ref._port}" allowed2 = f"http://0.0.0.0:{server_ref._port}" if origin and origin not in (allowed, allowed2): self._send_json(403, {"succe ...[truncated 3911 chars]- Remediation
View remediation
