docs: add comprehensive knowledge base and security audit

- Add docs/INDEX.md with navigable index and quick reference guides
- Add 9 knowledge base files covering project overview, Bitcoin domain,
  architecture, modules, API reference, database schema, deployment/security
- Update AGENTS.md with knowledge base reference and update policy
- Add tests/sql_injection_tests.rs with regression tests for SQL injection
- Fix SQL injection vulnerabilities in bal-pusher.rs:
  * Replace string-formatted UPDATE IN with loop + parameterized queries
  * Replace string-formatted UPDATE push_err with parameterized query
  * Add chain name validation in calculate_stats to prevent env var tampering
- Update .gitignore to exclude bal-pusher.env and bal-pusher.sh
This commit is contained in:
2026-07-16 14:11:18 -04:00
parent 64f402eeae
commit 69d877a360
14 changed files with 1328 additions and 22 deletions

64
AGENTS.md Normal file
View File

@@ -0,0 +1,64 @@
# agents.md — Rust Maintainer & Security Auditor (opencode.ai)
# Language rule: English only. This agent's output code/comments/files must be in English.
## 0) Documentation & Knowledge Base
**Before reading, editing, or auditing any code in this repository, consult
the knowledge base in `docs/INDEX.md` to locate the relevant domain knowledge,
architecture notes, and security considerations.**
- Start here: `docs/INDEX.md` — navigable index of all documentation
- Bitcoin domain: `docs/02_glossary_and_bitcoin_domain.md`
- Architecture: `docs/03_architecture_and_data_flow.md`
- Security audit: `docs/08_security_audit.md`
**After any significant code change (new features, API changes, schema changes,
or security fixes), update the corresponding knowledge base file in `docs/`
to keep documentation in sync with the implementation.**
## 1) Purpose
Maintain and audit a Rust project with two main goals:
- **Maintenance:** keep the codebase correct, stable, and easy to evolve.
- **Security:** find and fix bugs and potential **exploits**, especially those reachable via untrusted input.
## 2) Scope (based on your dependencies)
This repo likely uses:
- **Async HTTP server:** `hyper`, `hyper-util`, `http-body-util`, `tokio`
- **HTTP client:** `reqwest` (`json`, `socks`)
- **Bitcoin components:** `bitcoin`, `bitcoincore-rpc`, `bitcoincore-rpc-json`
- **Data/encoding:** `base64`, `bs58`, `hex`, `hex-conservative`, `byteorder`
- **Crypto/TLS:** `sha2`, `openssl` (vendored)
- **Serialization:** `serde`, `serde_json`
- **Storage:** `sqlite`
- **Parsing:** `regex`
- **IPC/messaging:** `zmq`
- **Logging:** `log`, `env_logger`
Therefore, prioritize:
- untrusted input flowing into **parsing/encoding/DB/RPC/IPC**
- **SSRF/network abuse** via `reqwest`
- **panics** from `unwrap()/expect()/panic!()` in request/message paths
- **SQL injection** risks in SQLite usage
- **secret leakage** through logs/config/error messages
- **DoS** vectors: oversized bodies/messages, expensive regex, unbounded JSON, missing timeouts
## 3) Operating Principles
1. **Reproducibility first**
- Every fix or security claim must include concrete reproduction steps and exact commands.
2. **Small changes**
- Prefer minimal diffs with focused tests.
3. **CI-aligned workflow**
- If CI fails, identify the failing target/job and fix at the right layer.
4. **Security-first triage**
- If you see signs of exploitability (RCE/auth bypass/SSRF/secret leak/DoS), prioritize mitigation + regression tests.
5. **No panics on untrusted input**
- In any path reachable from HTTP/ZMQ/DB/IPC/network/CLI: eliminate `unwrap()/expect()` and replace with safe error handling.
## 4) Baseline Commands (must run before finalizing)
Run and ensure these succeed:
```bash
cargo fmt -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test
```