CodeQL Dataflow SQL Injection (Go)
+
+
+Table of Contents
+ +
+
+1. Intro
+
+
+-
+
- Minimal Go example to demonstrate taint flow: untrusted input from
stdinflows into a dynamically constructed SQL string and is executed viaexec.Command("sqlite3", ...).
+ - Two CodeQL queries are included:
+
-
+
SourceGetUserInfo.ql: matches the return value ofgetUserInfo()as a taint source.
+SinkExecCommandThirdArg.ql: matches the 3rd argument ofexec.Command(...)as a taint sink.
+
+
+
+2. Build a CodeQL database
+
+
++Assumes Go toolchain and CodeQL CLI are installed and on PATH. +
+ +
+
+
+cd codeql/codeql-dataflow-sql-injection-go + +# Optional: fetch deps if any +go mod init example.com/adduser 2>/dev/null || true +go mod tidy 2>/dev/null || true + +# Create the CodeQL database (Go extractor auto-detected) +codeql database create db --language=go --source-root . ++
+If you already have a database, you can skip creation and reuse it. +
+
+
+3. Run the queries
+
+
++First, install the pack dependencies, then analyze the database with this pack. +
+ +
+
+
+cd codeql/codeql-dataflow-sql-injection-go + +# Install dependencies for the pack +codeql pack install + +# Run both queries in this directory against the database +codeql database analyze db . \ + --format=sarifv2.1.0 \ + --output=results.sarif ++
+To run a single query: +
+ +
+
+codeql database analyze db SourceGetUserInfo.ql --format=text +codeql database analyze db SinkExecCommandThirdArg.ql --format=text ++
+
+4. Notes
+
+
+-
+
- The queries use AST matching (not dataflow) to demonstrate precise source/sink identification. You can wire them into a taint configuration to perform full dataflow analysis. +