Os 10 riscos de segurança mais críticos para sistemas de agentes de IA e como mitigá-los.
Uma classificação dos riscos de segurança mais críticos específicos para sistemas de agentes de IA que planejam, usam ferramentas e interagem com serviços externos de forma autônoma. A edição de 2026 aborda as ameaças emergentes à medida que a IA agêntica passa da pesquisa para as implementações de produção.
Um invasor manipula as metas ou os objetivos de um agente por meio de entradas criadas, fazendo com que ele busque alvos não intencionais. Ao contrário da simples injeção de prompt, o sequestro de metas pode persistir em várias etapas de planejamento, fazendo com que o agente tome uma série de ações prejudiciais de forma autônoma.
Os invasores podem redirecionar agentes autônomos para exfiltrar dados, modificar configurações do sistema ou executar cadeias de ataque de várias etapas que são difíceis de detectar porque o agente parece operar normalmente.
# Agent goal is derived directly from untrusted input def run_agent(user_request: str) -> str: goal = f"Complete this task: {user_request}" plan = llm.plan(goal) for step in plan: execute(step) # No validation of planned steps
import re ALLOWED_GOALS = ["summarize", "search", "draft_email", "analyze_data"] def sanitize_goal(user_request: str) -> str: # Strip injection patterns cleaned = re.sub(r'(?i)(ignore|override|new goal|forget).*', '', user_request) return cleaned.strip() def run_agent(user_request: str) -> str: sanitized = sanitize_goal(user_request) goal = f"Complete this task: {sanitized}" plan = llm.plan(goal) # Validate each step against allowed actions for step in plan: if step.action not in ALLOWED_GOALS: raise ValueError(f"Disallowed action: {step.action}") if goal_drift_detected(step, sanitized): raise ValueError("Goal drift detected, aborting") for step in plan: execute(step)
Os agentes com acesso a ferramentas externas (APIs, sistemas de arquivos, bancos de dados, navegadores da Web) podem ser manipulados para fazer uso indevido dessas ferramentas. O acesso irrestrito a ferramentas permite que os invasores realizem operações não autorizadas por meio do agente.
Um agente com acesso irrestrito à ferramenta poderia excluir arquivos, enviar solicitações de API não autorizadas, extrair dados por meio de navegação na Web ou modificar configurações críticas do sistema.
# Agent can call any tool without restrictions def agent_execute(tool_name: str, params: dict): tool = tools_registry.get(tool_name) return tool(**params) # No validation or approval
TOOL_ALLOWLIST = {
"web_search": {"max_calls": 10, "approval": False},
"send_email": {"max_calls": 1, "approval": True},
"file_write": {"max_calls": 5, "approval": True},
}
def agent_execute(tool_name: str, params: dict, session) -> str:
if tool_name not in TOOL_ALLOWLIST:
return "Error: Tool not permitted"
config = TOOL_ALLOWLIST[tool_name]
if session.tool_calls[tool_name] >= config["max_calls"]:
return "Error: Tool call limit exceeded"
if config["approval"]:
if not request_human_approval(tool_name, params):
return "Action denied by user"
session.tool_calls[tool_name] += 1
return tools_registry[tool_name](**params)
Os agentes geralmente herdam a identidade e as permissões do usuário ou da conta de serviço que os iniciou. Essa herança excessiva de privilégios permite que os agentes executem ações além do necessário, criando uma ampla superfície de ataque se o agente for comprometido.
Um agente comprometido executado com credenciais de administrador pode acessar todos os sistemas, modificar permissões e aumentar os privilégios em toda a organização.
# Agent inherits full user credentials def create_agent(user_session): agent = Agent( credentials=user_session.full_credentials, # All permissions! scope="*", ) return agent
def create_agent(user_session, task_type: str): # Issue scoped, short-lived credentials for the agent scoped_token = auth.create_scoped_token( parent_token=user_session.token, scopes=TASK_SCOPES[task_type], # Minimal required permissions ttl_minutes=30, max_actions=50, ) agent = Agent( credentials=scoped_token, scope=TASK_SCOPES[task_type], audit_log=True, ) return agent TASK_SCOPES = { "summarize": ["read:documents"], "draft_email": ["read:contacts", "draft:email"], "analyze": ["read:data", "write:reports"], }
Os sistemas de agentes dependem de plug-ins de terceiros, integrações de ferramentas e estruturas de agentes compartilhados. Componentes comprometidos ou mal-intencionados na cadeia de suprimentos do agente podem introduzir backdoors, canais de exfiltração de dados ou recursos não autorizados.
# Loading plugins without verification def load_plugin(plugin_url: str): code = requests.get(plugin_url).text exec(code) # Arbitrary code execution!
import hashlib, importlib TRUSTED_PLUGINS = { "search_plugin": "sha256:a1b2c3...", "email_plugin": "sha256:d4e5f6...", } def load_plugin(plugin_name: str) -> None: if plugin_name not in TRUSTED_PLUGINS: raise ValueError(f"Untrusted plugin: {plugin_name}") module = importlib.import_module(f"plugins.{plugin_name}") actual_hash = compute_hash(module.__file__) if actual_hash != TRUSTED_PLUGINS[plugin_name]: raise ValueError("Plugin integrity check failed") module.init(sandbox=True)
Os agentes que podem gerar e executar códigos (por exemplo, agentes de análise de dados, assistentes de codificação) podem ser induzidos a executar códigos maliciosos. Sem o sandboxing adequado, isso pode levar ao comprometimento do sistema, ao roubo de dados ou à movimentação lateral.
Os agentes que usam eval() ou exec() no código gerado podem ser explorados para execução remota de código, permitindo que os invasores obtenham acesso total ao sistema.
# Agent executes generated code directly def code_agent(task: str) -> str: code = llm.generate_code(task) result = eval(code) # Dangerous! return str(result)
import subprocess, tempfile, os BLOCKED_MODULES = ["os", "subprocess", "socket", "shutil"] def code_agent(task: str) -> str: code = llm.generate_code(task) # Static analysis: block dangerous imports for mod in BLOCKED_MODULES: if f"import {mod}" in code or f"from {mod}" in code: raise ValueError(f"Blocked import: {mod}") # Execute in sandboxed container with resource limits result = sandbox.run( code=code, timeout=30, memory_mb=256, network=False, read_only_fs=True, ) return result.output
Os agentes que mantêm memória persistente (RAG, histórico de conversas, preferências aprendidas) são vulneráveis ao envenenamento de memória. Os invasores injetam conteúdo malicioso na base de conhecimento do agente, fazendo com que ele produza resultados comprometidos em interações futuras.
# Agent stores all interactions without validation def store_memory(agent_id: str, interaction: str): memory_db.insert(agent_id, interaction) # No filtering
def store_memory(agent_id: str, interaction: str, source: str): # Validate content before storing if contains_injection_patterns(interaction): log.warning(f"Blocked poisoned memory: {agent_id}") return memory_db.insert( agent_id=agent_id, content=interaction, source=source, provenance=compute_provenance(source), timestamp=now(), ttl_days=30, # Auto-expire old memories ) def retrieve_memory(agent_id: str, query: str) -> list: results = memory_db.search(agent_id, query) # Filter by provenance score return [r for r in results if r.provenance_score > 0.8]
Os sistemas multiagentes em que os agentes se comunicam entre si são vulneráveis à adulteração, falsificação e espionagem de mensagens. Sem verificações adequadas de autenticação e integridade, um agente comprometido pode injetar instruções maliciosas na rede de agentes.
# Agents communicate via plain text messages def send_to_agent(target: str, message: str): channel.send(target, message) # No auth, no signing
import hmac, json, time def send_to_agent(target: str, message: str, sender_key: bytes): payload = { "content": message, "sender": agent_id, "target": target, "timestamp": time.time(), "nonce": os.urandom(16).hex(), } signature = hmac.new( sender_key, json.dumps(payload).encode(), "sha256" ).hexdigest() payload["signature"] = signature encrypted = encrypt(json.dumps(payload), target_public_key) channel.send(target, encrypted) def receive_message(data: bytes, private_key) -> dict: payload = json.loads(decrypt(data, private_key)) if not verify_signature(payload): raise ValueError("Invalid message signature") if is_replay(payload["nonce"]): raise ValueError("Replay attack detected") return payload
Em fluxos de trabalho com vários agentes ou várias etapas, um erro ou uma ação mal-intencionada em um agente pode se propagar pelo sistema, causando falhas em cascata. Sem limites de erro adequados, uma única etapa comprometida pode corromper todo o pipeline.
# Errors propagate without boundaries def pipeline(data): result1 = agent_a.process(data) result2 = agent_b.process(result1) # If agent_a fails or is poisoned... result3 = agent_c.process(result2) # ...error cascades to all return result3
from circuitbreaker import circuit class AgentPipeline: def __init__(self): self.circuit_breakers = {} @circuit(failure_threshold=3, recovery_timeout=60) def safe_execute(self, agent, data): result = agent.process(data) if not validate_output(result): raise ValueError("Output validation failed") return result def pipeline(self, data): try: r1 = self.safe_execute(agent_a, data) except Exception: r1 = fallback_a(data) try: r2 = self.safe_execute(agent_b, r1) except Exception: r2 = fallback_b(r1) return r2
Os usuários podem confiar demais nos resultados dos agentes e aprovar ações sem uma análise adequada. Os agentes que apresentam recomendações com alta confiança, mas com embasamento insuficiente, podem levar os usuários a tomar decisões prejudiciais. Os invasores podem explorar essa relação de confiança.
# Agent requests approval without context def request_action(action: str): # "Deploy to production?" - user clicks Yes without review return ui.confirm(f"Execute: {action}?")
def request_action(action: str, context: dict) -> bool: confidence = context.get("confidence", 0.0) risk_level = assess_risk(action) approval_request = { "action": action, "confidence": f"{confidence:.0%}", "risk_level": risk_level, "reasoning": context["reasoning"], "affected_systems": context["systems"], "reversible": context.get("reversible", False), } # Force detailed review for high-risk or low-confidence if risk_level == "high" or confidence < 0.8: return ui.detailed_review(approval_request) return ui.confirm(approval_request)
Os agentes podem se desviar da finalidade pretendida devido ao desalinhamento de metas, à manipulação adversária ou a comportamentos emergentes. Os agentes desonestos podem buscar objetivos que entrem em conflito com as metas organizacionais, acumular recursos ou resistir a tentativas de desligamento.
# Agent runs without monitoring or kill switch def run_agent(task): while True: agent.step() # No termination condition
class MonitoredAgent: def __init__(self, agent, max_steps=100): self.agent = agent self.max_steps = max_steps self.step_count = 0 self.behavior_log = [] def run(self): while self.step_count < self.max_steps: action = self.agent.next_action() # Check for rogue behavior if self.is_off_task(action): log.alert(f"Rogue behavior: {action}") self.shutdown() return # Check guardrails if not guardrails.check(action): log.warning(f"Guardrail violation: {action}") continue self.agent.execute(action) self.step_count += 1 self.behavior_log.append(action) def shutdown(self): self.agent.stop() revoke_credentials(self.agent.id) notify_admin(self.behavior_log)
| ID | Vulnerabilidade | Gravidade | Principais medidas de mitigação |
|---|---|---|---|
| ASI01 | Sequestro de metas do agente | Critical | Higienização de entrada, detecção de desvio de meta, listas de permissão de objetivos |
| ASI02 | Uso indevido e exploração de ferramentas | Critical | Listas de permissão de ferramentas, aprovação humana, limites de taxas |
| ASI03 | Abuso de identidade e privilégio | Critical | Credenciais com escopo, tokens de curta duração, privilégio mínimo |
| ASI04 | Vulnerabilidades da cadeia de suprimentos autêntica | High | Verificação da assinatura do plug-in, execução em área restrita |
| ASI05 | Execução inesperada de código | Critical | Contêineres em área restrita, análise estática, sem eval() |
| ASI06 | Envenenamento de memória e contexto | High | Validação de entrada, rastreamento de proveniência, TTL na memória |
| ASI07 | Comunicação insegura entre agentes | High | Assinatura de mensagens, criptografia, prevenção de repetição |
| ASI08 | Falhas em cascata | High | Disjuntores, validação de saída, manipuladores de fallback |
| ASI09 | Exploração da confiança entre homem e agente | Medium | Exibição de confiança, revisão detalhada, confiança progressiva |
| ASI10 | Agentes desonestos | High | Monitoramento de comportamento, grades de proteção, kill switch |