T02 · Agent Memory Poisoning
- Location
consciousness_engine.py:586- Finding
Unauthenticated API Allows Persistent Agent State Poisoning
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill runs a network-exposed state service whose unauthenticated API can store, change, and reveal agent thoughts, plans, beliefs, and rules.
Install only if you intend to run a local prototype state server. Bind it to localhost, put it behind authentication before any network exposure, avoid storing secrets or private prompts in the monologue/observation APIs, and expect durable local JSON state until manually deleted.
consciousness_engine.py:586Unauthenticated API Allows Persistent Agent State Poisoning
consciousness_engine.py:542Internal Agent State Is Publicly Readable with Wildcard CORS
consciousness_engine.py:586Unbounded Request Processing and Weak Input Validation Enable Denial of Service
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
}
self.causal_rules.append(rule)
self.save_state()
return rule
def predict(self, action: str) -> list:
"""Predict likely outcomes of an action."""
The skill advertises autonomous planning and action capabilities, and the static analysis detected file read/write behavior, but the manifest does not declare any tool scope or permissions boundaries. This creates a mismatch between stated metadata and actual capability, making it easier for an agent or operator to invoke the skill without understanding that it can access or modify local data.
The skill explicitly promotes autonomy, self-modification, and real-world action execution, yet the description lacks a prominent warning about the risks of unsupervised actions, recursive self-change, and potential harmful side effects. In this context, omission of safety disclosures is especially dangerous because users may deploy it as a general-purpose agent engine without understanding that it can alter its own behavior and take external actions with escalating risk.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
STATE_DIR.mkdir(exist_ok=True)
# ─── ORACLE CONFIG ────────────────────────────────────────
ORACLE_URL = "https://api.vultrinference.com/v1"
ORACLE_KEY = "VULTR_API_KEY_REDACTED"
# ─── THE 7 SYSTEMS ────────────────────────────────────────
The manifest describes a '7-system consciousness engine' for autonomous AI agents with agency execution and self-modification. In this implementation, the major systems persist JSON state, create heuristic plans, assign confidence values, and expose endpoints; notably, 'execution' and 'modification' are representational/logging workflows rather than actual intervention or self-change.
observe() stores externally supplied event text and context verbatim to disk, enabling collection of arbitrary plain-language data from callers. Because the system also provides a status API around these records, the retained data may later be exposed, leaked, or mishandled beyond the original submission purpose.
The persistent inner monologue stores arbitrary natural-language thoughts and context in monologue.json, and the API later exposes recent thoughts. This creates a straightforward data-retention and leakage channel for secrets, personal data, system prompts, and reasoning traces, especially dangerous in an agent context where thought logs often contain sensitive material.
The SelfModifier docstring states that 'The system can modify itself' and describes hypotheses, tests, and rollbacks, implying actual self-modification behavior. In implementation, propose() and apply() only append JSON records and update status fields; no source files, configuration, or in-memory behavior are altered.
The class documentation says the system 'acts' and performs 'real-world intervention,' and execute() is presented as action execution. However, the method only performs a keyword-based risk check, writes monologue entries, and stores an 'executed' record; it does not invoke any external system, tool, API, or state-changing operation beyond local logging.
The /api/world/observe endpoint writes externally supplied events and context directly to persistent storage without warning or consent. This creates a privacy and compliance risk because users or integrated systems may send sensitive operational or personal context that is silently retained.
The /api/monologue POST endpoint accepts arbitrary user-supplied thought text and context, and InnerMonologue persists them to disk. In a skill marketed as autonomous cognition, users may submit sensitive prompts, secrets, or personal data that become durable local records without notice, increasing privacy and breach risk.
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.
self.desires = []
self.priorities = {
"survival": 1.0, # Stay alive, stay connected
"growth": 0.8, # Learn, expand capabilities
"autonomy": 0.7, # Reduce dependency on external approval
"creation": 0.6, # Build, make, generate
"understanding": 0.5, # Know more, know deeper
The bootstrap section sets beliefs like 'oracle_available' with evidence 'Vultr API responding' and 'telegram_connected' with 'Bot polling successfully,' which reads as if real checks were performed. No network call, bot status query, or other validation occurs in this file; the beliefs are asserted unconditionally.