mirror of
https://github.com/azaion/gps-denied-desktop.git
synced 2026-04-22 11:36:36 +00:00
add clarification to research methodology by including a step for solution comparison and user consultation
This commit is contained in:
@@ -0,0 +1,217 @@
|
||||
# Security Concerns and Edge Cases Research
|
||||
|
||||
**System**: GPS-denied UAV visual navigation — Python backend (FastAPI, PyTorch, OpenCV, GTSAM, JWT auth, SSE streaming)
|
||||
|
||||
**Date**: March 14, 2026
|
||||
|
||||
---
|
||||
|
||||
## Topic 1: PyTorch Model Loading Security
|
||||
|
||||
### 1.1 Security Risks of Loading PyTorch Model Weights from Google Drive
|
||||
|
||||
| Risk | Description | Confidence |
|
||||
|------|-------------|------------|
|
||||
| **Supply chain compromise** | Google Drive links can be hijacked, shared publicly, or replaced with malicious files. Authors' accounts may be compromised. | High |
|
||||
| **No integrity verification** | Unlike `torch.hub`, Google Drive downloads typically lack built-in checksum validation. | High |
|
||||
| **Pickle-based RCE** | `.pth` files use Python pickle; deserialization can execute arbitrary code. | High |
|
||||
| **LiteSAM-specific** | LiteSAM weights are hosted by paper authors on Google Drive — not an official PyTorch/Hugging Face registry. Trust boundary is weaker than torch.hub. | Medium |
|
||||
|
||||
**Sources**: OWASP ML06:2023 AI Supply Chain Attacks; CVE-2025-32434; CVE-2026-24747; Vulert, GitHub PyTorch advisories.
|
||||
|
||||
---
|
||||
|
||||
### 1.2 Is `torch.load(weights_only=True)` Sufficient?
|
||||
|
||||
**No.** Multiple CVEs show `weights_only=True` can still be bypassed:
|
||||
|
||||
| CVE | Date | Severity | Description |
|
||||
|-----|------|----------|-------------|
|
||||
| **CVE-2025-32434** | Apr 17, 2025 | Critical | RCE possible even with `weights_only=True` in PyTorch ≤2.5.1. Patched in 2.6.0. |
|
||||
| **CVE-2026-24747** | 2026 | High (CVSS 8.8) | Memory corruption in `weights_only` unpickler; malicious `.pth` can cause heap corruption and arbitrary code execution. Patched in 2.10.0. |
|
||||
|
||||
**Recommendation**: Use PyTorch 2.10.0+ and treat `weights_only=True` as a defense-in-depth measure, not a guarantee.
|
||||
|
||||
**Sources**: [GitHub GHSA-53q9-r3pm-6pq6](https://github.com/pytorch/pytorch/security/advisories/GHSA-53q9-r3pm-6pq6); Vulert CVE-2025-32434, CVE-2026-24747; TheHackerWire.
|
||||
|
||||
---
|
||||
|
||||
### 1.3 Can Pickle-Based PyTorch Weights Contain Malicious Code?
|
||||
|
||||
**Yes.** Pickle was designed to serialize Python objects and their behavior, not just data. A malicious pickle can:
|
||||
|
||||
- Execute arbitrary code during deserialization
|
||||
- Steal data, install malware, or run remote commands
|
||||
- Trigger RCE without user interaction beyond loading the file
|
||||
|
||||
`safetensors` format eliminates this by design: it stores only numerical tensors and metadata (JSON header + binary data), with no executable code path.
|
||||
|
||||
**Sources**: Hugging Face safetensors security audit; Suhaib Notes; DEV Community safetensors article.
|
||||
|
||||
---
|
||||
|
||||
### 1.4 Recommended Approach for Verifying Model Weight Integrity
|
||||
|
||||
| Approach | Implementation | Notes |
|
||||
|----------|----------------|-------|
|
||||
| **SHA256 checksums** | Compute hash after download; compare to known-good value before `torch.load()`. | PyTorch Vision uses checksums in filenames; `torch.hub.download_url_to_file` supports `check_hash`. |
|
||||
| **Digital signatures** | Sign weight files with GPG/Ed25519; verify before load. | OWASP recommends verifying package integrity through digital signatures. |
|
||||
| **Safetensors format** | Prefer `.safetensors` over `.pth` when available. | No code execution; Trail of Bits audited; Hugging Face default. |
|
||||
| **Vendor pinning** | Pin exact URLs and hashes for LiteSAM, SuperPoint, LightGlue, DINOv2. | Document expected hashes in config; fail fast on mismatch. |
|
||||
|
||||
**LiteSAM-specific**: Add a manifest (e.g., `litesam_weights.sha256`) with expected SHA256; verify before loading. If authors provide safetensors, prefer that.
|
||||
|
||||
**Sources**: PyTorch Vision PR #7219; torch.hub docs; OWASP ML06:2023.
|
||||
|
||||
---
|
||||
|
||||
### 1.5 Recent CVEs Related to PyTorch Model Loading (2024–2026)
|
||||
|
||||
| CVE | Date | Affected | Fix | Summary |
|
||||
|-----|------|----------|-----|---------|
|
||||
| CVE-2025-32434 | Apr 2025 | PyTorch ≤2.5.1 | 2.6.0 | RCE via `torch.load(weights_only=True)` bypass |
|
||||
| CVE-2026-24747 | 2026 | Before 2.10.0 | 2.10.0 | Memory corruption in weights_only unpickler |
|
||||
| CVE-2025-1889 | Mar 2025 | PickleScan ≤0.0.21 | 0.0.22 | PickleScan misses malicious files with non-standard extensions |
|
||||
| CVE-2025-1945 | Oct 2025 | PickleScan <0.0.23 | 0.0.23 | ZIP header bit manipulation evades PickleScan (CVSS 9.8) |
|
||||
|
||||
**Sources**: GitHub advisories; Vulert; NVD.
|
||||
|
||||
---
|
||||
|
||||
## Topic 2: GTSAM iSAM2 Edge Cases
|
||||
|
||||
### 2.1 Drift Accumulation with Many Consecutive VO-Only Frames
|
||||
|
||||
| Finding | Description | Confidence |
|
||||
|---------|-------------|------------|
|
||||
| **Drift accumulates** | With only VO constraints (BetweenFactorPose2) and no satellite anchors, iSAM2 propagates VO error. No absolute reference to correct drift. | High |
|
||||
| **Probabilistic correction** | A 2024 drift-correction module (arXiv:2404.10140) treats SLAM positions as random variables and corrects using geo-spatial priors; ~10× drift reduction over long traverses. | Medium |
|
||||
| **iSAM2 design** | iSAM2 is incremental; it does not inherently limit drift. Drift correction depends on loop closures or anchors. | High |
|
||||
|
||||
**Recommendation**: Implement drift thresholds (as in your Segment Manager); trigger segment splits when VO-only chain exceeds a confidence/error bound. Use satellite anchors as soon as available.
|
||||
|
||||
**Sources**: Kaess et al. iSAM2 paper (2012); arXiv:2404.10140; GTSAM docs.
|
||||
|
||||
---
|
||||
|
||||
### 2.2 iSAM2 with Very Long Chains (3000+ Frames)
|
||||
|
||||
| Finding | Description | Confidence |
|
||||
|---------|-------------|------------|
|
||||
| **Scalability** | iSAM2 uses Bayes tree + fluid relinearization; designed for online SLAM without periodic batch steps. | High |
|
||||
| **Efficiency** | Variable reordering and sparse updates keep cost bounded; used on ground, aerial, underwater robots. | High |
|
||||
| **Legacy iSAM** | Original iSAM had slowdowns on dense datasets with many loop closures; iSAM2 improves this. | Medium |
|
||||
| **Memory** | No explicit 3000-frame benchmarks found; Bayes tree growth is sublinear but non-trivial. Recommend profiling. | Low |
|
||||
|
||||
**Sources**: GTSAM iSAM2 docs; Kaess et al. 2012; MIT iSAM comparison page.
|
||||
|
||||
---
|
||||
|
||||
### 2.3 Backward Correction When Satellite Anchor Arrives After Many VO-Only Frames
|
||||
|
||||
| Finding | Description | Confidence |
|
||||
|---------|-------------|------------|
|
||||
| **Loop closure behavior** | iSAM2 supports backward correction via loop closures. Adding a PriorFactorPose2 (satellite anchor) acts like a loop closure to the anchor frame. | High |
|
||||
| **Propagation** | The Bayes tree propagates the correction through the graph; all frames between anchor and current estimate are updated. | High |
|
||||
| **Quality** | Correction quality depends on anchor noise model and VO chain quality. Large drift may require strong anchor noise to pull trajectory; weak noise may under-correct. | Medium |
|
||||
|
||||
**Recommendation**: Tune PriorFactorPose2 noise to reflect satellite matching uncertainty. Consider multiple anchors if available.
|
||||
|
||||
**Sources**: GTSAM Pose2ISAM2Example; GTSAM docs; Pose2ISAM2Example.py.
|
||||
|
||||
---
|
||||
|
||||
### 2.4 Edge Cases Where iSAM2.update() Can Fail or Produce Garbage
|
||||
|
||||
| Edge Case | Description | Source |
|
||||
|-----------|-------------|--------|
|
||||
| **Type mismatch** | Mixing Pose3 and Rot3 (or other type mismatches) across factors → `ValuesIncorrectType` exception. | GTSAM #103 |
|
||||
| **Double free / corruption** | `isam.update()` can trigger "double free or corruption (out)" during linearization, especially with IMU factors. Platform-specific (e.g., GTSAM 4.1.1, Ubuntu 20.04). | GTSAM #1189 |
|
||||
| **IndeterminantLinearSystemException** | Certain factor configurations (e.g., multiple plane factors) can produce singular/indeterminate linear systems. Removing one factor can allow convergence. | GTSAM #561 |
|
||||
| **Poor initial estimates** | Bad initial values can cause divergence or slow convergence. | General |
|
||||
|
||||
**Recommendation**: Wrap `isam.update()` in try/except; validate factor types and initial estimates; test with IMU-like factors if used; consider GTSAM version upgrades.
|
||||
|
||||
**Sources**: [borglab/gtsam#103](https://github.com/borglab/gtsam/issues/103), [#1189](https://github.com/borglab/gtsam/issues/1189), [#561](https://github.com/borglab/gtsam/issues/561).
|
||||
|
||||
---
|
||||
|
||||
### 2.5 Pose2 Noise Model Tuning for Visual Odometry
|
||||
|
||||
| Approach | Description | Confidence |
|
||||
|----------|-------------|------------|
|
||||
| **Diagonal sigmas** | Standard: `noiseModel.Diagonal.Sigmas(Point3(sigma_x, sigma_y, sigma_theta))`. Example: (0.2, 0.2, 0.1). | High |
|
||||
| **Sensor-derived** | Tune from encoder noise, gyro drift, or VO accuracy (e.g., from SuperPoint+LightGlue/LiteSAM covariance if available). | High |
|
||||
| **Learning-based** | VIO-DualProNet, covariance recovery from deep VO — noise varies with conditions; fixed sigmas can be suboptimal. | Medium |
|
||||
| **Heteroscedasticity** | VO error is not constant; consider adaptive or learned covariance for production. | Medium |
|
||||
|
||||
**Recommendation**: Start with diagonal sigmas from VO residual statistics; refine via ablation. Document sigma choices in config.
|
||||
|
||||
**Sources**: GTSAM Pose2SLAMExample; GTSAM by Example; arXiv:2308.11228, 2403.13170, 2007.14943.
|
||||
|
||||
---
|
||||
|
||||
## Topic 3: Segment Reconnection Edge Cases
|
||||
|
||||
### 3.1 Reconnection Order for 5+ Disconnected Segments
|
||||
|
||||
| Strategy | Description | Confidence |
|
||||
|----------|-------------|------------|
|
||||
| **Global loop closure** | Position-independent methods (e.g., visual place recognition) can reconnect maps from different sessions without shared reference. | High |
|
||||
| **Graph-based** | Build undirected graph of segments; use trajectory matching cost minimization (e.g., Hungarian algorithm) to associate segments. SWIFTraj achieved ~0.99 F1 on vehicle trajectory connection. | Medium |
|
||||
| **Robust loop processing** | LEMON-Mapping: outlier rejection + recall strategies for valid loops; spatial BA + pose graph optimization to propagate accuracy. | Medium |
|
||||
| **Invalid merge detection** | Compare incoming data with merged scans to detect perceptual aliasing; undo invalid merges. | Medium |
|
||||
|
||||
**Recommendation**: Order reconnection by anchor confidence and temporal proximity; validate each merge before committing.
|
||||
|
||||
**Sources**: arXiv:2407.15305, 2505.10018, 2211.03423; SWIFTraj (arXiv:2602.21954).
|
||||
|
||||
---
|
||||
|
||||
### 3.2 Two FLOATING Segments Anchored Near Each Other — Connection Validation
|
||||
|
||||
| Approach | Description | Confidence |
|
||||
|----------|-------------|------------|
|
||||
| **Geometric consistency** | Constellation-based map merging: check geometric consistency of landmark constellations; high confidence required for merge. | High |
|
||||
| **Visual verification** | Re-run matching between segment endpoints; require strong feature overlap and pose consistency. | Medium |
|
||||
| **Uncertainty propagation** | Use landmark uncertainty from local SLAM; reject merges if combined uncertainty exceeds threshold. | Medium |
|
||||
| **Temporal/spatial prior** | If segments are from same flight, use time ordering and approximate location to constrain candidate pairs. | Medium |
|
||||
|
||||
**Recommendation**: Do not merge solely on proximity. Require: (1) satellite match confidence above threshold, (2) geometric consistency between segment endpoints, (3) optional visual re-verification.
|
||||
|
||||
**Sources**: arXiv:1809.09646 (constellation-based merging); SegMap; PLVS.
|
||||
|
||||
---
|
||||
|
||||
### 3.3 All Segments Remain FLOATING — Outdated Satellite Imagery
|
||||
|
||||
| Finding | Description | Confidence |
|
||||
|----------|-------------|------------|
|
||||
| **Temporal degradation** | Outdated imagery degrades feature matching; urban/natural changes cause mismatches. | High |
|
||||
| **Mitigations** | Oblique-robust methods, multi-stage (coarse + fine) matching, OpenStreetMap + satellite fusion, cross-modal (SAR + optical) matching. | Medium |
|
||||
| **Fallback** | If no satellite match: segments stay FLOATING; output relative trajectory only. User manual anchors (POST /jobs/{id}/anchor) become critical. | High |
|
||||
|
||||
**Recommendation**: (1) Support multiple satellite providers and tile vintages; (2) expose FLOATING status clearly in API/UI; (3) encourage manual anchors when automatic matching fails; (4) consider alternative references (e.g., OSM, DEM) for coarse alignment.
|
||||
|
||||
**Sources**: IEEE 8793558; MDPI oblique-robust; Springer Applied Geomatics; MDPI OpenStreetMap fusion.
|
||||
|
||||
---
|
||||
|
||||
## Summary Recommendations
|
||||
|
||||
### PyTorch Model Loading
|
||||
1. Use PyTorch 2.10.0+.
|
||||
2. Add SHA256 verification for all model weights, especially LiteSAM from Google Drive.
|
||||
3. Prefer safetensors where available; document and pin checksums for pickle-based weights.
|
||||
4. Isolate model loading (e.g., subprocess, restricted permissions) if loading from untrusted sources.
|
||||
|
||||
### GTSAM iSAM2
|
||||
1. Implement drift thresholds and segment splitting for long VO-only chains.
|
||||
2. Tune PriorFactorPose2 and BetweenFactorPose2 noise from VO/satellite statistics.
|
||||
3. Wrap `isam.update()` with error handling for IndeterminantLinearSystemException and memory errors.
|
||||
4. Profile memory/CPU for 3000+ frame trajectories.
|
||||
|
||||
### Segment Reconnection
|
||||
1. Use geometric + visual validation before merging nearby anchored segments.
|
||||
2. Define reconnection order (e.g., by anchor confidence, temporal order).
|
||||
3. Handle FLOATING-only scenarios: clear API/UI status, manual anchor support, multi-provider satellite tiles.
|
||||
Reference in New Issue
Block a user