wave12 survey: 5 clean-scan additions (jekyll, eleventy, kong, hugo, raylib)

10 sci/static-site/api-gateway/games targets scanned. Honor roll cumulative:
54 projects. scipy distance_impl.h M7 cluster is intentional distance
algorithms (FP). kong M4 cluster is test-fixture credential headers.
synapse haystack.contains is intentional substring pre-check before regex.
No flagship CWE-407 this pass.
This commit is contained in:
russell@unturf.com 2026-04-25 14:19:31 -04:00
parent 272ced7fa6
commit 1c9cb86381
No known key found for this signature in database

View file

@ -0,0 +1,80 @@
# Wave 12 — Science, Static Site Generators, API Gateways, Game Libs
**Survey date:** 2026-04-25
**Tool:** unmoad (9 active MOAD detectors, HIGH+ severity filter)
**Scope:** 10 projects across scientific computing (scipy, jax), Matrix server (synapse), static site generators (hugo, jekyll, eleventy), API gateways/proxies (kong, traefik), data orchestration (dagster), and game libraries (raylib).
---
## Summary
Wave 12 totals 1,880 HIGH+ findings across 10 projects. **Five new clean-scan honor roll entries** (jekyll, eleventy, kong, hugo, raylib). Honor roll cumulative: **54 projects** across waves 3-12.
**No flagship CWE-407 patches ship this pass.** Static site generators have tight, bounded codebases. API gateways like kong are dominated by M4 string-literal false positives in test fixtures (auth header names appearing as test data). Scientific libraries (scipy, jax) have M7 hits dominated by intentional distance/algorithm function names matching the `_distance(` heuristic.
## Clean-scan honor roll — 5 new entries
| Project | Lang | Role | Notes |
|---------|------|------|-------|
| **jekyll** | Ruby | Static site generator | 10 findings, all `Array#include?` on small bounded constants (NESTED_OBJECT_FIELD_BLACKLIST, ATTRIBUTES_FOR_LIQUID, etc.) + 1 vendored respond.min.js. Core gem clean. |
| **eleventy** | Node | Modern static site generator | 10 findings, all JS `Array#includes` on small bounded arrays (validTemplateLanguageKeys, STAGES, file lookups, error string matching). Tight codebase. |
| **kong** | Lua | Cloud-native API gateway | 49 findings, **0 M1**. All M4 are "Authorization"/"Proxy-Authorization" header names appearing as test data in `t/01-pdk/02-log/05-set_serialize_value.t` — credential-keyword-in-string-literal FPs in the PDK log test suite. |
| **hugo** | Go | Static site generator (fastest in class) | 54 findings, dominated by `internal/warpc/js/renderkatex.bundle.js` (vendored KaTeX renderer JS bundle). Core hugo Go code clean. |
| **raylib** | C | Simple game library | 159 findings: 64 in vendored `cgltf.h` (Khronos glTF parser), 20 in vendored `m3d.h` (model3d format), 12 in vendored `miniaudio.h` distance APIs, 6 in `tools/rexm/rexm.c` CLI tool. raylib core clean. |
Honor roll now stands at **54 projects** validated zero-real-finding under MOAD scanning.
## Per-target findings
| Project | Lang | Total | M1 | M3 | M4 | M5 | M6 | M7 | M9 | M11 | Triage |
|---------|------|------:|---:|---:|---:|---:|---:|---:|---:|----:|--------|
| scipy | C/Python | 459 | 60 | 338 | 10 | 1 | - | 48 | - | 2 | M7 cluster in `spatial/src/distance_impl.h` (mahalanobis, minkowski, euclidean, jensenshannon) — intentional distance algorithms, scanner FP on `_distance(` name match. SuperLU `strncmp(trans, "N", 1)` is single-char algorithm flag. M3 cluster mostly in tests. |
| dagster | Python/TS | 442 | 229 | 108 | 12 | 18 | 27 | 24 | 21 | 3 | Most M1 in vendored `graphiql.min.js`, `react-dom.production.min.js`, `graphiql-plugin-explorer.umd.js`. UI source `useAssetCheckPartitionData.tsx` `partitions.indexOf(range.startKey)` — partitions list scales with asset partition count; bounded by user-configured partition cardinality. |
| jax | Python | 411 | 95 | 286 | 8 | 6 | - | 9 | - | 7 | `lax_reference.py` is reference impl for testing. `convolution.py` `lhs_dilation.count(1)` is one-shot at lowering. `bcoo.py` `operator.index(n)` is type-conversion call, not a list index. M3 in tests. |
| synapse | Python/Rust | 194 | 26 | 98 | 55 | - | 6 | 8 | - | 1 | jquery-3.4.1.min.js vendored (23 hits). `rust/src/push/utils.rs:148` `haystack.contains(&*word)` is intentional substring pre-check before regex (optimization). M3 cluster in test contexts. |
| **raylib** | C | 159 | 154 | - | - | - | - | 5 | - | - | All M1 in vendored `cgltf.h`/`m3d.h`/CLI tool. **clean** |
| traefik | Go | 92 | 23 | 51 | 9 | - | 7 | 2 | - | - | `compress.go:80` `slices.Contains(defaultSupportedEncodings, encoding)` per request — `defaultSupportedEncodings` is fixed constant (gzip, br, zstd, deflate, ~5 entries). `gen/centrifuge.go` is a code generator (build-time). Bounded. |
| **hugo** | Go | 54 | 34 | 3 | 3 | 1 | - | 12 | - | 1 | Vendored renderkatex JS dominates. **clean** |
| **kong** | Lua | 49 | - | - | 25 | 12 | 2 | 9 | - | 1 | Test-fixture credential headers. **clean** |
| **jekyll** | Ruby | 10 | 10 | - | - | - | - | - | - | - | Bounded constant arrays. **clean** |
| **eleventy** | Node | 10 | 10 | - | - | - | - | - | - | - | Bounded arrays + error-message string contains. **clean** |
## Investigation notes
### scipy `distance_impl.h` M7 cluster — false positive on function names
```c
mahalanobis_distance(const double *u, const double *v, ...)
minkowski_distance(const double *u, const double *v, ...)
```
These are intentional distance-metric implementations for scipy.spatial.distance. The M7 detector matches `_distance(` substring as candidate Flatland defects, but these ARE the distance-metric algorithms — not lookups against an index. **Detector enhancement candidate:** suppress M7 when matched function is itself a distance/metric primitive.
### synapse Rust push notification matcher — intentional substring pre-check
`Matcher::Word { word, regex }` does `if !haystack.contains(&*word) { return Ok(false); }` BEFORE running the more expensive word-boundary regex. This is a deliberate optimization (cheap substring check rejects ~99% of non-matches before regex compilation). Not a defect — an existing optimization the scanner does not yet model.
### kong M4 cluster — test fixture false positives
49 of 49 kong findings are credential-keyword-in-string-literal hits in test files (`.t` files) and spec fixtures. The PDK log test suite uses headers like `request.headers.authorization` as TEST DATA to verify the PDK's serialization behavior. Bounded to test code. Same pattern as Wave 10's libsodium/wolfssl test diagnostic strings.
### dagster `useAssetCheckPartitionData.tsx` partitions.indexOf
`partitions.indexOf(range.startKey)` runs O(P) where P is the asset's partition count. For users with 10k+ partitions per asset (rare), this becomes measurable per range render. Logged for re-scan if a user reports realistic perf impact.
## Triage backlog
1. **Scanner enhancement: M7 distance-primitive detection** — suppress M7 when the function name being defined ends in `_distance`/`_metric` (the function IS the algorithm, not a lookup). Would clear most of scipy's 48 M7 hits.
2. **Scanner enhancement: M4 test-context detection** — already noted in Wave 10. Wave 12 reinforces: kong (49), synapse (55), dagster (12), scipy (10) all carry credential-keyword test-data FPs. A `*_test.*` / `t/` / `spec/` / `tests/` path prefix suppression would clear ~150 false positives wave-wide.
3. **synapse Rust push utils** — re-scan if a real perf report lands; current substring pre-check is an intentional optimization.
4. **dagster partitions.indexOf** — re-scan if a user reports realistic 10k+ partition cardinality slowing UI.
## Method
Same as Waves 3-11: shallow clone, `unmoad -s high -f json`, filter test/vendor/UI/macro-generated noise, manual triage of strongest source-only candidates per project. **Five projects added to clean-scan honor roll.** No new UNDF IDs assigned (no patches shipped).
## References
- `unmoad` detection engine: `git.unturf.com/engineering/unmoad.com`
- Earlier surveys: `/test-harness-survey/`, `/wave4-linter-ci-survey/`, `/wave5-cicd-iac-survey/`, `/wave6-docgen-webfw-tui-survey/`, `/docs-pipeline-survey/`, `/wave7-mail-dns-storage-vpn-rtos-survey/`, `/wave8-observability-streaming-survey/`, `/wave9-image-pdf-db-editors-survey/`, `/wave10-crypto-text-geo-flutter-survey/`, `/wave11-unix-search-ml-survey/`
- Clean-scan honor roll cumulative: 54 projects across waves 3-12