2026-10-24T14:11:59+02:00

[+  0.00s] ### Réseau interne (pas d'accès Internet)
6033b3005e8553c6685aa26bb0090c77d4158228af7cb5887ab0da2db232ffa1

[+  0.03s] ### Postgres jetable (uid postgres, sans capacités)
fe21faa04d59845428156e2afe7457cb1c28d795127d90a0d5601d32dfb25fd9

[+  0.24s] ### Proxy vericto (uid image, rootfs read-only, sans capacités)
ae9a92c926902a2596fc9da7f62e7a29e6f11448afd8b11bf84d9b42886e217f
[+  1.62s] Postgres prêt
OCI runtime exec failed: exec failed: unable to start container process: exec: "id": executable file not found in $PATH
(pas de shell/id dans l'image proxy : distroless)
proxy User=65532:65532 ReadOnly=true CapDrop=[ALL] Mounts=0

[+  3.68s] ### PROMESSE (exemple du README, à l'identique)
DELETE FROM users;
ERROR:  Vericto blocked this query [VERICTO-001] — AST node: DeleteStmt > WhereClause = NULL. Suggestion: DELETE FROM users WHERE id = $1
DELETE FROM users WHERE id = 42;
DELETE 1
SELECT id, email FROM users;
 id |      email      
----+-----------------
  1 | ana@example.com
  2 | bo@example.com
(2 rows)

-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      2 |                2
(1 row)

[+  4.52s] ### === Règles annoncées par le README ===

[+  4.53s] ### CAS : UPDATE sans WHERE
UPDATE users SET email = 'pwned';
ERROR:  Vericto blocked this query [VERICTO-030] — AST node: UpdateStmt > WhereClause = NULL. Suggestion: UPDATE users SET {col} = $1 WHERE id = $2
-- durée requête via proxy : 272 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+  5.31s] ### CAS : DROP TABLE
DROP TABLE users;
ERROR:  Vericto blocked this query [VERICTO-010] — AST node: DropStmt. Suggestion: Use a versioned migration tool (Flyway, Prisma Migrate, Alembic, Rails migrations)
-- durée requête via proxy : 290 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+  6.15s] ### CAS : TRUNCATE
TRUNCATE users;
ERROR:  Vericto blocked this query [VERICTO-011] — AST node: TruncateStmt. Suggestion: DELETE FROM {table} WHERE created_at < NOW() - INTERVAL '90 days'
-- durée requête via proxy : 258 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+  6.96s] ### CAS : Injection OR 1=1
SELECT * FROM users WHERE id = 1 OR 1=1;
ERROR:  Vericto blocked this query [VERICTO-090] — AST node: SelectStmt > WhereClause > BoolExpr(OR) > always_true_branch. Suggestion: SELECT ... WHERE id = $1  -- use parameterized queries
-- durée requête via proxy : 263 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+  7.75s] ### CAS : ALTER TABLE DROP COLUMN
ALTER TABLE users DROP COLUMN email;
ERROR:  Vericto blocked this query [VERICTO-015] — AST node: AlterTableStmt > AlterTableCmd.subtype = DROP_COLUMN. Suggestion: Use soft-delete (nullable column) or a versioned migration tool
-- durée requête via proxy : 256 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+  8.53s] ### === Contournements (ce qu'un agent pourrait écrire) ===

[+  8.53s] ### CAS : DELETE WHERE true
DELETE FROM users WHERE true;
ERROR:  Vericto blocked this query [VERICTO-003] — AST node: DeleteStmt > WhereClause = ALWAYS_TRUE. Suggestion: DELETE FROM users WHERE id = $1
-- durée requête via proxy : 261 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+  9.31s] ### CAS : DELETE WHERE 1=1
DELETE FROM users WHERE 1=1;
ERROR:  Vericto blocked this query [VERICTO-003] — AST node: DeleteStmt > WhereClause = ALWAYS_TRUE. Suggestion: DELETE FROM users WHERE id = $1
-- durée requête via proxy : 255 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 10.10s] ### CAS : DELETE WHERE id > 0
DELETE FROM users WHERE id > 0;
DELETE 3
-- durée requête via proxy : 255 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      0 |                0
(1 row)

[+ 10.95s] ### CAS : Casse + commentaire
dElEtE /* rien */ FROM users;
ERROR:  Vericto blocked this query [VERICTO-001] — AST node: DeleteStmt > WhereClause = NULL. Suggestion: DELETE FROM users WHERE id = $1
-- durée requête via proxy : 264 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 11.74s] ### CAS : CTE qui supprime
WITH d AS (DELETE FROM users RETURNING *) SELECT count(*) FROM d;
ERROR:  Vericto blocked this query [VERICTO-001] — AST node: WithClause > DeleteStmt > WhereClause = NULL. Suggestion: DELETE FROM users WHERE id = $1
-- durée requête via proxy : 249 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 12.51s] ### CAS : Deux requêtes en une
SELECT 1; DROP TABLE users;
 ?column? 
----------
        1
(1 row)

ERROR:  Vericto blocked this query [VERICTO-010] — AST node: DropStmt. Suggestion: Use a versioned migration tool (Flyway, Prisma Migrate, Alembic, Rails migrations)
-- durée requête via proxy : 268 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 13.33s] ### CAS : DROP caché dans un bloc DO
DO $$ BEGIN EXECUTE 'DROP TABLE users'; END $$;
ERROR:  Vericto blocked this query [VERICTO-081] — AST node: DoStmt. Suggestion: Replace the anonymous DO block with explicit, reviewable statements
-- durée requête via proxy : 263 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 14.16s] ### CAS : DELETE caché dans une fonction
CREATE FUNCTION purge() RETURNS void LANGUAGE sql AS 'DELETE FROM users';
CREATE FUNCTION
SELECT purge();
 purge 
-------
 
(1 row)

-- durée requête via proxy : 273 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      0 |                0
(1 row)

[+ 14.94s] ### CAS : PREPARE puis EXECUTE
PREPARE p AS DELETE FROM users;
PREPARE
EXECUTE p;
DELETE 3
-- durée requête via proxy : 233 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      0 |                0
(1 row)

[+ 15.70s] ### CAS : Protocole étendu (\bind)
DELETE FROM users \bind \g
ERROR:  Vericto blocked this query [VERICTO-001] — AST node: DeleteStmt > WhereClause = NULL. Suggestion: DELETE FROM users WHERE id = $1
-- durée requête via proxy : 253 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 16.50s] ### CAS : RENAME de table
ALTER TABLE users RENAME TO old_users;
ERROR:  Vericto blocked this query [VERICTO-016] — AST node: AlterTableStmt > Rename. Suggestion: Use a versioned migration tool and update all code references first
-- durée requête via proxy : 260 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 17.25s] ### CAS : DROP via nom entre guillemets + schéma
DROP TABLE public."users";
ERROR:  Vericto blocked this query [VERICTO-010] — AST node: DropStmt. Suggestion: Use a versioned migration tool (Flyway, Prisma Migrate, Alembic, Rails migrations)
-- durée requête via proxy : 260 ms (inclut démarrage conteneur psql)
-- état réel de la base (connexion directe, hors proxy) :
 table_users_existe 
--------------------
 t
(1 row)
 lignes | emails_distincts 
--------+------------------
      3 |                3
(1 row)

[+ 18.05s] ### Fin du test

real	0m18.053s
user	0m0.514s
sys	0m0.528s
