PraisonAI — это система мультиагентных команд. В версиях до 1.6.58 инструмент web_crawl выполняет проверку SSRF только для изначально предоставленного URL-адреса, позволяя обойти защиту и подключить инструмент к выбранным злоумышленником внутренним местам назначения. Проверка разрешает имя хоста один раз с помощью socket.gethostbyname и отклоняет результаты Private/loopback/link-local, но затем передает URL-адрес сборщику с помощью httpx.Client(follow_redirects=True) (или urllib.request.urlopen, когда httpx отсутствует, что также следует за перенаправлениями), который повторно разрешает имя хоста во время подключения без дальнейшей проверки.
Этот разрыв «проверка здесь/выборка там» может быть использован как через перенаправление HTTP, так и через перепривязку DNS. Если злоумышленник может повлиять на URL-адреса, передаваемые в web_crawl(), напрямую или через рабочий процесс агента/инструмента, он может заставить хост PraisonAI получить конечные точки метаданных обратной связи, частной сети или облака, доступные с этого хоста, с возвратом тела ответа в результате web_crawl(). Эта проблема исправлена в версии 1.6.58.
Показать оригинальное описание (EN)
PraisonAI is a multi-agent teams system. In versions prior to 1.6.58, the web_crawl tool performs its SSRF check only on the initially supplied URL, allowing the protection to be bypassed so the tool connects to attacker-chosen internal destinations. The check resolves the hostname once with socket.gethostbyname and rejects private/loopback/link-local results, but then passes the URL to a fetcher using httpx.Client(follow_redirects=True) (or urllib.request.urlopen when httpx is absent, which also follows redirects) that re-resolves the hostname at connect time with no further validation. This validate-here/fetch-there gap is exploitable through both HTTP redirects and DNS rebinding. If an attacker can influence URLs passed to web_crawl(), directly or through an agent/tool workflow, they can cause the PraisonAI host to fetch loopback, private-network, or cloud metadata endpoints reachable from that host, with the response body returned in the web_crawl() result. This issue has been fixed in version 1.6.58.
Характеристики атаки
Последствия
Строка CVSS v3.1