Rapport d'audit de code statique

Destinataire : Exemple geomacro · Source analysée : https://github.com/blocknine0/geomacro · Date : 2026-10-10 16:14:05
Réalisé par Arthur Grossi EI — audit de code statique · arthhur.grossi@gmail.com

Indice de propreté : 0/100 — Critique

353 571 lignes analysées · 2172 fichiers · 62 constats relevés

4
Critique
38
Élevé
20
Moyen
0
Faible
Ce que ce document prouve : la présence, à la date indiquée, des constructions listées ci-dessous aux fichiers et lignes cités.
Ce qu'il ne prouve pas : l'absence d'autres vulnérabilités. L'analyse est statique — le code n'est jamais exécuté. Les fichiers de test, exemples et dépendances sont exclus. Les faux positifs possibles sont signalés comme « constats », non comme « vulnérabilités confirmées ».

Constats détaillés

Classés par nombre de constats par fichier. Chaque constat indique la correction attendue.

server/routes/internal/commercial-ops.get.ts 14 constats

Moyen Écriture HTML directe ligne 121
$('funnelCards').innerHTML=funnelCards.map(([k,v])=>'<div class="card"><div class="k">'+esc(k)+'</div><div class="v">'+esc(v)+'</div></div>').join('');
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 128
$('cards').innerHTML=cards.map(([k,v])=>'<div class="card"><div class="k">'+esc(k)+'</div><div class="v">'+esc(v)+'</div></div>').join('');
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 137
$('growthTable').innerHTML=growthTable(j.data); $('growthStatusText').innerHTML='<span class="ok">Loaded '+esc(j.data.length)+' draft(s). No external publication performed.</span>'
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 138
}catch(e){$('growthStatusText').innerHTML='<span class="danger">'+esc(e.message)+'</span>'}
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 147
$('growthStatusText').innerHTML='<span class="ok">Draft '+esc(action)+'d. No external publication performed.</span>';
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 149
}catch(e){$('growthStatusText').innerHTML='<span class="danger">'+esc(e.message)+'</span>'}
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 155
$('funnelRollup').innerHTML=table(rollup);
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 156
$('funnelTable').innerHTML=table(attempts);
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 161
if(opsToken.length<32){$('status').innerHTML='<span class="danger">Enter the owner token.</span>';return}
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 166
summarize(j.data); renderDeveloperFunnel(j.data); $('usageTable').innerHTML=table(j.data.recent_usage); $('paymentTable').innerHTML=table(j.data.recent_payments); $('usageRollup').
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 167
$('content').classList.remove('hidden'); $('status').innerHTML='<span class="ok">Loaded '+esc(j.data.generated_at)+'</span>';
Correction : textContent, ou assainissement.
Moyen Écriture HTML directe ligne 169
}catch(e){$('status').innerHTML='<span class="danger">'+esc(e.message)+'</span>'}
Correction : textContent, ou assainissement.

… et 2 autre(s) constat(s) dans ce fichier.

scripts/db/check-migration-safety.mjs 3 constats

Élevé Requête SQL concaténée ligne 245
String.raw`\bdelete\s+from\s+(${qualifiedSqlIdentifier})(?=\s|;|$)`,
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 349
/\bdelete\s+from\b/i.test(
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 375
/\bdelete\s+from\b/gi,
Correction : Requêtes paramétrées.

src/lib/testnet-public-access-contract.ts 3 constats

Critique Secret probable en dur ligne 7
public_api_key: "gmk_public_arc_testnet_v1",
Correction : Révoquer la clé, la placer en variable d'environnement, purger l'historique Git.
Critique Secret probable en dur ligne 12
public_api_key: "gmk_public_base_sepolia_v1",
Correction : Révoquer la clé, la placer en variable d'environnement, purger l'historique Git.
Critique Secret probable en dur ligne 17
public_api_key: "gmk_public_polygon_amoy_v1",
Correction : Révoquer la clé, la placer en variable d'environnement, purger l'historique Git.

scripts/compute-gri-v11.js 2 constats

Élevé Requête SQL concaténée ligne 888
.insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 902
const { error } = await supabase.from('gri_contributions').insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.

scripts/compute-gri-v12.js 2 constats

Élevé Requête SQL concaténée ligne 883
.insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 897
const { error } = await supabase.from('gri_contributions').insert(rows.slice(i, i + chunkSize));
Correction : Requêtes paramétrées.

scripts/ops/b2-compact-structured-event-bundle.mjs 2 constats

Élevé Requête SQL concaténée ligne 297
const hotBytesBefore = updates.reduce((sum, item) => sum + item.current_bytes, 0);
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 298
const hotBytesAfter = updates.reduce((sum, item) => sum + item.pointer_bytes, 0);
Correction : Requêtes paramétrées.

scripts/validate-gri-v12.js 2 constats

Élevé Requête SQL concaténée ligne 162
let q = supabase.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 341
const { error } = await supabase.from('gri_validation_metrics').insert(rows.slice(i, i + 500));
Correction : Requêtes paramétrées.

scripts/validate-gri.js 2 constats

Élevé Requête SQL concaténée ligne 162
let q = supabase.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.
Élevé Requête SQL concaténée ligne 341
const { error } = await supabase.from('gri_validation_metrics').insert(rows.slice(i, i + 500));
Correction : Requêtes paramétrées.

.github/workflows/telegram-b2-d1-consumer.yml 1 constat

Élevé Requête SQL concaténée ligne 224
npx -y "wrangler@${WRANGLER_VERSION}" d1 execute DB --remote --json --config "$D1_CONFIG" --command "UPDATE telegram_signal_lead_queue SET attempt_count=attempt_count+1,last_attemp
Correction : Requêtes paramétrées.

scripts/audit-agent-hot-topic-readiness.ts 1 constat

Élevé Requête SQL concaténée ligne 44
let query: any = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.

scripts/audit-gdelt-dependency-live.mjs 1 constat

Élevé Requête SQL concaténée ligne 88
let query = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.

scripts/audit-global-production-coverage.mjs 1 constat

Élevé Requête SQL concaténée ligne 41
let q = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.

scripts/audit-global-realtime-intelligence-100.mjs 1 constat

Élevé Requête SQL concaténée ligne 83
let query = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.

scripts/audit-hot-topic-family-readiness.ts 1 constat

Élevé Requête SQL concaténée ligne 43
let query: any = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.

scripts/audit-sovereign-fiscal-production-diagnostics.ts 1 constat

Élevé Requête SQL concaténée ligne 90
let query: any = db.from(table).select(select).range(from, from + pageSize - 1);
Correction : Requêtes paramétrées.

scripts/audit-ucdp-quality-reasons.ts 1 constat

Élevé Requête SQL concaténée ligne 34
let query: any = db.from(table).select(select).range(from, from + PAGE_SIZE - 1);
Correction : Requêtes paramétrées.

scripts/commercial/private-pilot-demand-report.mjs 1 constat

Élevé Requête SQL concaténée ligne 37
const { data, error } = await db.from(table).select(columns).order(orderColumn).range(start, Math.min(start + 499, limit - 1));
Correction : Requêtes paramétrées.

scripts/drain-live-structure.mjs 1 constat

Élevé Requête SQL concaténée ligne 152
events_updated: outputs.reduce((n, row) => n + Number(row?.events_updated ?? 0), 0),
Correction : Requêtes paramétrées.

scripts/early-warning/ecb-rss-core.mjs 1 constat

Élevé Requête SQL concaténée ligne 96
.update(`${guid}\n${publishedAt}\n${title}`, "utf8")
Correction : Requêtes paramétrées.

scripts/ingest-gdelt-v2-events-live.mjs 1 constat

Moyen Hachage faible ligne 278
const exportMd5 = createHash("md5").update(zipBuffer).digest("hex")
Correction : bcrypt / Argon2id.

Intégrité du livrable

Empreinte SHA-256 de l'arborescence source analysée (2172 fichiers, triés, contenu inclus) :

d3baf7ac48d67aa2fa8e5fbb68aae314fb95096a3a8b4fe7394f59d747a42058

Pour vérifier que ce rapport correspond bien à la version analysée : clonez le dépôt dans cet état, puis recalculez l'empreinte des fichiers listés. Toute divergence signifie que le code a changé depuis l'audit — auquel cas ce rapport ne s'applique plus.