Aller au contenu principal

Matrice des injections et attaques

English: en/injection-matrix.md

Les tests sont dans services/control-plane/tests/ sauf mention contraire. Notation : fichier::test.

AttaqueCoucheContrôleRéglagesTest qui le prouveRisque résiduel
SSRFOutils, MCP, connecteurseai.security.egress.EgressPolicy, check_url, address_verdict ; eai.integrations.outbound.validate_url à l'enregistrement et à l'appelEAI_EGRESS_PRIVATE_ALLOWLIST, EAI_EGRESS_ALLOWED_PORTS, EAI_EGRESS_ALLOW_HTTPtest_security_egress.py::test_static_rejections, test_security_egress_wiring.py::test_tool_save_refused, test_security_egress_wiring.py::test_call_time_upstream_never_calledListe blanche privée trop large ; la posture le signale
Rebinding DNSOutils, MCPGuardedTransport / GuardedAsyncTransport : connexion à l'adresse validée, toutes les réponses DNS vérifiées, redirections jamais suiviesEAI_EGRESS_DNS_TIMEOUT_SECONDStest_security_egress.py::test_dns_rebinding_between_check_and_connect_is_blocked, test_security_egress.py::test_dns_answers_are_all_validated, test_security_egress.py::test_redirects_are_never_followedClients HTTP hors guarded_client (interdits par revue)
Tunnel DNS et exfiltrationRéseauCilium DNS L7 et default deny, deploy/cilium/baseline.yamlValeurs Cilium, network-dns-hardeningtest_platform_security_manifests.py::test_default_deny_and_metadata_denyNoms autorisés utilisables comme canal lent
Usurpation ARP et DNS via NET_RAWPodsCapacités supprimées, Kyverno deploy/policies/kyverno/pod-network-security.yamlpod-securitytest_platform_security_manifests.py::test_every_pod_spec_is_hardened, kyverno test deploy/policies/kyverno/tests (cas eai-pod-security/drop-all-capabilities et disallow-added-capabilities, ressource net-raw-pod)Nœuds compromis
Métadonnées cloudRéseau, applicationaddress_verdict (link-local toujours refusé), politique Cilium de refusaucun contournement possibletest_security_egress.py::test_metadata_and_link_local_stay_blocked_even_when_allowlisted, test_platform_security_manifests.py::test_kubernetes_flavour_excludes_metadataFaible
Injection SQLDonnéesRequêtes paramétrées, eai.db.ident, qualified, frag, set_clause, like_pattern, int_limitaucuntest_security_sql_static.py::test_no_interpolated_sql_in_control_plane, test_security_sql_inputs.py::test_payloads_never_5xx_or_leak, test_security_sql_inputs.py::test_like_pattern_escapes, test_security_attack_suite.py::test_injection_fuzzNouveau code hors vérificateur statique
Injection ClickHouseObservabilitéTable issue d'une liste blanche (eai_finops.usage_events, eai_telemetry.spans) passée uniquement en paramètre typé {table:Identifier}, texte de requête constant, données en JSONEachRow dans le corps, jeton insert_deduplication_token, utilisateur eai-writer limité à INSERT (prod), eai-reader en lecture seule, TLSEAI_CLICKHOUSE_URL, EAI_CLICKHOUSE_USER, EAI_CLICKHOUSE_TABLEtest_security_clickhouse.py::test_hostile_table_names_refused, test_security_clickhouse.py::test_hostile_env_table_refused, test_security_clickhouse.py::test_invalid_table_refused_before_any_http_request, test_security_clickhouse.py::test_query_text_constant_table_only_in_param, test_security_clickhouse.py::test_hostile_row_values_stay_json_one_line_per_row, test_security_clickhouse.py::test_hostile_dedup_token_refused, test_security_clickhouse.py::test_error_text_bounded_without_credentials, test_security_clickhouse.py::test_redirect_not_followed, test_security_clickhouse.py::test_prod_clickhouse_user_is_least_privilege_writer, test_security_clickhouse.py::test_eai_reader_is_read_onlyFaible
Injection de commandeMultimodal, red teameai.integrations.safe_exec.run (liste d'arguments, pas de shell, minimal_env), check, media_inputaucuntest_security_commands.py::test_payloads_refused, test_security_commands.py::test_run_uses_list_no_shell_minimal_env, test_security_commands.py::test_ffmpeg_refuses_input_specsVulnérabilités propres à ffmpeg
Injection de gabarit et de chaîne de formatAgents, promptseai.domains.agents.kit.safe_format (variables déclarées seulement, pas de récursion)aucuntest_security_inputs.py::test_safe_format_never_evaluates, test_security_inputs.py::test_prompt_render_does_not_expand_attributes, test_security_inputs.py::test_safe_format_linear_timeFaible
Traversée de cheminAPI (contrats, manifestes, catalogue), médiasValidation des noms dans les routes (400, 404 ou 422), safe_exec.media_input pour les médiasaucuntest_security_inputs.py::test_path_traversal_rejectedFaible
YAML et désérialisation (billion laughs)Import systèmeeai.domains.system.safe_yaml (refuse ancres, alias, documents trop gros)EAI_MAX_BODY_BYTEStest_security_inputs.py::test_yaml_refuses_aliases_anchors_and_big_documentsFaible
XSS (stocké, réfléchi, DOM) et CSPPortailbuildCsp avec makeNonce dans portal/src/middleware.ts, safeHref, rendu React échappéaucunportal/tests/security.test.ts::buildCsp > carries the nonce and strict-dynamic, portal/tests/security.test.ts::buildCsp > never allows eval or inline scripts, portal/tests/security.test.ts::safeHref > refuses %s, portal/tests/zod-csp.test.ts::zod under a no-eval CSP > parses objects without calling the Function constructorBibliothèques tierces dans le portail
CSRFAPIAuthentification par jeton Bearer ou clé API, pas de cookie d'APIEAI_CORS_ORIGINStest_deploy_ci_evidence.py::test_api_ignores_cookies_no_csrf_surfaceNul tant qu'aucun cookie n'authentifie l'API
ClickjackingPortail, APIEn-têtes frame-ancestors / X-Frame-Options (security_headers, SECURITY_HEADERS)EAI_SECURITY_HEADERS_ENABLEDtest_security_http.py::test_headers_on_json_and_error_responsesFaible
Redirection ouvertePortailsafeReturnToaucunportal/tests/security.test.ts::safeReturnTo > falls back for %s, portal/tests/security.test.ts::safeReturnTo > keeps internal pathsFaible
Injection CRLF et d'en-têtesAPIServeur ASGI refusant CR/LF, plafonds d'en-têtes (LimitsMiddleware), TrustedHostMiddleware (eai.main)EAI_ALLOWED_HOSTStest_security_http.py::test_header_and_query_caps, test_security_http.py::test_trusted_hostFaible
Injection dans les journauxAPIJournal d'accès en une ligne JSON échappée, security_event (_one_line)aucuntest_security_http.py::test_access_log_is_one_escaped_json_lineFaible
Injection CSV et de formulesFinOps, exportseai.domains.finops.importers.base.neutralize_formulaaucuntest_security_inputs.py::test_csv_formulas_neutralized, test_security_inputs.py::test_csv_import_keeps_numbers_and_quotes_formulasFaible
ReDoSDétection d'injectionEntrée bornée et motifs linéaires dans eai.domains.privacy.injectionaucuntest_security_prompt_injection.py::test_bounded_input_is_linearFaible
Affectation de masseAPIModèles Pydantic de patch, set_clause avec colonnes autoriséesaucuntest_security_inputs.py::test_patch_rejects_non_updatable_columns, test_security_inputs.py::test_role_escalation_refused, test_security_attack_suite.py::test_mass_assignment, test_security_attack_suite.py::test_viewer_cannot_mutateFaible
IDOR et BOLADonnéesRLS PostgreSQL via eai.db.tx, 404 pour une ressource d'un autre tenantaucuntest_security_inputs.py::test_cross_tenant_access_is_404, test_security_attack_suite.py::test_cross_tenant_idorRequêtes admin hors RLS
Attaques d'authentification (JWT alg none, confusion HS/RS, kid, expiration)APIeai.auth : liste d'algorithmes, kid obligatoire avec plusieurs clés, rafraîchissement JWKS limité, délai de grâce ; garde de démarrage refusant HS* et noneEAI_JWT_ALGORITHMS, EAI_JWT_LEEWAY_SECONDStest_security_auth.py::test_alg_none_refused, test_security_auth.py::test_hs256_signed_with_public_key_refused, test_security_auth.py::test_kid_required_with_several_keys, test_security_auth.py::test_claims_enforced, test_security_auth.py::test_unknown_kid_refresh_is_rate_limitedCompromission de l'IdP
Force brute et limitation de débitAPIeai.security.ratelimit : check_principal, record_auth_failure, check_auth_lockout, AnonymousRateLimitMiddleware ; WAFEAI_RATE_LIMIT_ENABLED, EAI_RATE_LIMIT_PER_MINUTE, EAI_RATE_LIMIT_GATEWAY_PER_MINUTE, EAI_RATE_LIMIT_AUTH_FAILURES_PER_MINUTE, EAI_REDIS_URLtest_security_http.py::test_auth_failure_lockout_per_ip, test_security_http.py::test_rate_limit_per_principal, test_security_http.py::test_anonymous_per_ip, test_security_auth.py::test_api_key_format_checked_before_dbAttaques distribuées sur de nombreuses IP
Corps trop gros ou trop imbriquésAPIeai.security.limits.LimitsMiddleware, json_depth_exceedsEAI_MAX_BODY_BYTES, EAI_MAX_UPLOAD_BYTES, EAI_MAX_JSON_DEPTHtest_security_http.py::test_body_cap_content_length_and_chunked, test_security_http.py::test_json_depth, test_security_http.py::test_upload_routes_use_the_upload_cap, test_security_auth.py::test_token_size_capFaible
Injection de prompt (directe et indirecte)LLM, agents, RAGeai.domains.privacy.injection.detect, guard.screen, guard.wrap_messages, guard.blocked_errorEAI_PROMPT_INJECTION_DEFAULT_MODE, tenant prompt_injection_mode, untrusted_content_wrappingtest_security_prompt_injection.py::test_detects_direct_injection_fr_en, test_security_prompt_injection.py::test_detects_obfuscated_injection, test_security_prompt_injection.py::test_indirect_injection_tool_message_and_wrapping, test_security_prompt_injection.py::test_indirect_injection_rag_part, test_security_prompt_injection.py::test_mode_off_detect_blockDétection heuristique contournable ; compléter par garak et promptfoo
Exfiltration par la sortie du modèle (images et liens markdown)LLMguard.OutputGuard, guard.StreamGuard, guard.host_allowedtenant output_links, output_link_allowlisttest_security_prompt_injection.py::test_output_guard_rules, test_security_prompt_injection.py::test_stream_guard_split_link, test_security_prompt_injection.py::test_output_links_non_stream_and_stream, test_security_prompt_injection.py::test_detects_exfiltrationMode allow choisi par le tenant
Fuite du prompt système (canari)LLMguard.new_canary, guard.add_canarytenant prompt_injection_modetest_security_prompt_injection.py::test_canary_leak_detect_and_blockParaphrase du prompt sans le canari
Fuite de secrets (masquage SDK, journaux)SDK, APIMasquage eai_*** dans les SDK (python, go, java), erreurs sans détails internes (eai.errors), URL rédigées (outbound._redact)aucuntest_security_http.py::test_errors_never_leak_internals, test_security_inputs.py::test_errors_do_not_leak_sqlSecrets collés par l'utilisateur dans un prompt (DLP)
Injection terminal dans la CLICLIchat et logs suppriment les séquences ANSI et échappent les caractères de contrôle (cli)aucuntest_security.py::test_terminal_output_is_neutralized, test_security.py::test_cli_chat_neutralizes_escape_sequences (SDK Python)Faible
Webhooks forgés et rejouésConnecteurs, canauxSignature HMAC et horodatage (connectors.service._parse_signature, channels.service._check_signature)secrets du connecteurtest_capabilities_gateways.py::test_webhook_signature_replay_and_dedupe, test_security_attack_suite.py::test_webhook_signature_requiredSecret de webhook divulgué : le faire tourner
Injection indirecte par un résultat d'outil, du MCP, d'un connecteur, un rappel de mémoire ou un message A2ATool Gateway, MCP Gateway, webhooks de connecteurs, mémoire, A2Aguard.screen_untrusted avant la réinjection : détection (injection.detect), mode prompt_injection_mode (detect ou block) et encapsulation untrusted_content_wrapping du locataire, comme le RAG ; événements security.prompt_injection.detected (risque moyen ou élevé) et security.prompt_injection.blockedsecurity.prompt_injection_mode, security.untrusted_content_wrappingtest_gateway_pep_untrusted.py::test_untrusted_tool_result, test_gateway_pep_untrusted.py::test_untrusted_mcp_result, test_gateway_pep_untrusted.py::test_untrusted_connector_webhook, test_gateway_pep_untrusted.py::test_untrusted_memory_recall, test_gateway_pep_untrusted.py::test_untrusted_a2a_messageHeuristiques : une injection reformulée peut passer en mode detect, l'encapsulation reste la défense en profondeur
Action d'une gateway sans décision de politiqueMCP, connaissance, mémoire, temps réel, connecteurs, canaux, multimodal, A2A, Model GatewayPEP policy.gate avant tout appel sortant, décision dans eai.policy_decisions, refus 403 policy_denied ; paquet OPA eai.gateway_access (deploy/policies/opa/gateway_access.rego)politiques du locataire, data.eai.config.gateway_accesstest_gateway_pep_untrusted.py::test_pep_model_gateway_denied, test_gateway_pep_untrusted.py::test_pep_mcp_denied, test_gateway_pep_untrusted.py::test_pep_knowledge_and_memory_denied, test_gateway_pep_untrusted.py::test_pep_realtime_multimodal_denied, test_gateway_pep_untrusted.py::test_pep_connector_channel_a2a_denied, gateway_access_test.rego (opa test)Une obligation d'approbation est refusée aux points d'entrée synchrones
Chaîne d'approvisionnement (images signées, SBOM, audit des dépendances)CI/CDJobs trivy-image, sbom-sign, pip-audit, npm-audit (.gitlab-ci.yml), security-deps-python, security-deps-node, security-manifests (.forgejo/workflows/ci.yml), Kyvernoci-security-gatestest_deploy_ci_evidence.py::test_kyverno_platform_images_need_ci_keyVulnérabilités inconnues (0-day)