Skip to content

cpp: model libpq query functions as SQL-injection sinks - #22449

Open
kumarak wants to merge 1 commit into
github:mainfrom
trail-of-forks:kumarak/cpp-libpq-sql-sinks
Open

cpp: model libpq query functions as SQL-injection sinks#22449
kumarak wants to merge 1 commit into
github:mainfrom
trail-of-forks:kumarak/cpp-libpq-sql-sinks

Conversation

@kumarak

@kumarak kumarak commented Aug 27, 2026

Copy link
Copy Markdown

This PR adds SQL injection detection support for C/C++ code using the PostgreSQL libpq API. It models the SQL query arguments of PQexec, PQexecParams, PQprepare, PQsendQuery, PQsendQueryParams, and PQsendPrepare as sinks for the Uncontrolled data used in SQL queries.

It also adds tests covering both tainted and safe inputs for each modeled API, updates the expected results, and includes a change note documenting the new libpq modeling.

Add the PostgreSQL libpq query-execution functions as sql-injection
sinks so cpp/sql-injection flags tainted data reaching their SQL text:

- PQexec / PQsendQuery: query at argument 1
- PQexecParams / PQsendQueryParams: command at argument 1
- PQprepare / PQsendPrepare: query at argument 2

The *Prepared forms take a prepared-statement name rather than SQL text
and are not modeled. Follows the existing Oracle.oci sink convention.
Copilot AI balanced review requested due to automatic review settings August 27, 2026 15:51
@kumarak
kumarak requested a review from a team as a code owner August 27, 2026 15:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds libpq SQL-injection sink modeling for C/C++ PostgreSQL applications.

Changes:

  • Models six synchronous and asynchronous libpq query APIs.
  • Adds positive tests and a change note.
  • Updates expected query results.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
cpp/ql/lib/ext/Postgres.model.yml Defines libpq SQL-injection sinks.
cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test_libpq.c Exercises the new models.
cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected Records expected alerts and models.
cpp/ql/lib/change-notes/2026-08-27-libpq-sql-sinks.md Documents the added analysis support.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

PQsendPrepare(conn, "stmt", userInput, 0, 0); // $ Alert

// A constant query is safe.
PQexec(conn, "SELECT 1"); // GOOD
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants