Please do not open a public GitHub issue for a security vulnerability.
Report it to security@datadoghq.com. Datadog's disclosure process and PGP key are at https://www.datadoghq.com/security/. Include enough to reproduce: the version or commit, the input, and what you observed.
sqleq is a developer tool that reads SQL and DDL and runs external solvers. The inputs it is
designed to handle are queries you already have; it is not a sandbox and it is not a boundary.
Things we would want to know about:
- Memory-safety or crash bugs in any of the binaries reachable from ordinary SQL input — the frontend parses attacker-influenced text in some pipelines.
- Command injection or path traversal through a corpus file, a DDL string, or an output path.
- A way to make a binary write somewhere other than the places listed below.
Things that are working as intended, and not vulnerabilities:
sqleq-fuzzexecutes the SQL you give it. That is the whole method: it builds real tables in an in-process DuckDB and runs both statements against them. Pointing it at untrusted SQL is equivalent to running that SQL — andsqleq-check --portfoliorunssqleq-fuzzby default, as does any run whose--axesnamesfuzz.sqleq-checkstarts other programs. It runs every backend as a subprocess:sqleq-frontend, the QED prover (--prover,$QED_PROVER,PATH, or the newest Nix-built prover in/nix/store),sqleq-solver,sqleq-fuzzandsqleq-lean, each found as CONTRIBUTING.md describes. With--sqlsolver-jvmit also compiles the bridge intools/sqlsolver/withjavacand runsjava, both fromPATH, against the fork tree you name.sqleq-leanrunslake($LAKE, or the one onPATH), which builds thelean/package and runsleanon the files it generates. The frontend itself runs nothing.- Writes outside an output directory you named. Temporary directories under
$TMPDIR, removed afterwards unless you pass--keep.sqleq-check --blessrewrites, by design, theexpectlines of each pair file whose pins moved; a file with a header error is left alone.--sqlsolver-jvmwrites the compiled bridge totools/sqlsolver/out-fork/, andsqleq-leanwrites the Lean build tolean/.lake/.sqleq-frontend pair.sqlwithout an output path writespair.fe.jsonbeside its input, andsqleq-fuzz csvwithout one writes<corpus>.fuzz.jsonbeside its corpus.
A pair where a prover reports equivalent and the two queries are not equivalent is the most serious defect this project can have, but it is a correctness bug, not a security one — it is not a path to code execution or data access. Report it as a normal GitHub issue, with the two queries and the DDL. See CONTRIBUTING.md.