| Version | Supported |
|---|---|
| 0.15.x | Yes |
| 0.14.x | Yes |
| 0.13.x | No (end-of-life) |
| 0.12.x | No (end-of-life) |
| 0.11.x | No (end-of-life) |
| 0.10.x | No (end-of-life) |
| 0.9.x | No (end-of-life) |
| 0.8.x | No (end-of-life) |
| 0.7.x | No (end-of-life) |
| 0.6.x | No (end-of-life) |
| 0.5.x | No (end-of-life) |
| 0.4.x | No (end-of-life) |
| 0.3.x | No (end-of-life) |
| 0.2.x | No (end-of-life) |
| 0.1.x | No (end-of-life) |
If you discover a security vulnerability in quack-rs, please report it responsibly.
Do NOT open a public GitHub issue for security vulnerabilities.
Instead, please use GitHub's
private vulnerability reporting
feature on this repository. Alternatively, email tomf@tomtomtech.net
with the subject line [quack-rs security].
- A description of the vulnerability
- Steps to reproduce (minimal test case preferred)
- The impact (e.g., memory safety, information disclosure, denial of service)
- The affected version(s)
- Acknowledgment: Within 48 hours of report
- Assessment: Within 7 days
- Fix: Depends on severity; critical issues are prioritized
This security policy covers:
- Memory safety issues in unsafe code (use-after-free, double-free, buffer overflow)
- Undefined behavior in FFI callbacks
- Potential for panic across FFI boundaries (which is UB in Rust)
- Information disclosure through uninitialized memory
This policy does not cover:
- Bugs in DuckDB itself (report those to DuckDB)
- Bugs in
libduckdb-sysbindings (report to duckdb-rs) - Logic errors in extension code built with quack-rs (those are the extension author's responsibility)
quack-rs is designed with safety as a primary concern:
#![deny(unsafe_op_in_unsafe_fn)]insrc/lib.rsandunsafe_op_in_unsafe_fn = "deny"inCargo.toml: All unsafe operations require explicitunsafeblocks with// SAFETY:comments, even insideunsafe fn.- No panics across FFI: All entry points and callbacks use
Result/Option. The release profile setspanic = "abort"as defense-in-depth. - Double-free prevention:
FfiState<T>::destroy_callbacknulls pointers after freeing. - Boolean UB prevention:
VectorReader::read_boolreads asu8 != 0, never transmutes tobool. - RAII for DuckDB handles:
LogicalTypeensuresduckdb_destroy_logical_typeis always called. - Credential protection:
SecretEntryredacts field values inDebug/Displayoutput and zeroizes all sensitive data onDropusingwrite_volatile. - TLS hardening:
TlsConfigProviderenforces TLS 1.2+ by default andaudit_tls_provider()detects certificate validation bypass (CWE-295) and deprecated protocols (CWE-327). - Structured warnings:
WarningCollectorprovides thread-safe, CWE-annotated security warning collection for extensions.