T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Unpinned Third-Party Dependencies Permit Unreviewed Supply-Chain Changes
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This memory skill appears purpose-built rather than malicious, but it needs Review because it can send complete local agent-memory content and an API key to a configurable external endpoint without strong scoping or confirmation.
Install only if you are comfortable with your agent memory files and inserted documents being processed by the configured OpenAI-compatible API. Use a trusted endpoint, avoid putting secrets in memory files, use a limited API key, pin and review dependency versions, and verify the storage path before running the reset command.
requirements.txt:1Unpinned Third-Party Dependencies Permit Unreviewed Supply-Chain Changes
scripts/rag.py:26Sensitive Memory and API Credentials May Be Sent to an Arbitrary Configured Endpoint
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
def main():
# Load .env from script directory if present
script_dir = Path(__file__).parent
env_file = script_dir.parent / ".env"
if env_file.exists():
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
def main():
# Load .env from script directory if present
script_dir = Path(__file__).parent
env_file = script_dir.parent / ".env"
if env_file.exists():
try:
from dotenv import load_dotenv
The skill declares installation requirements and documents commands that read workspace memory files and environment variables, but it does not declare an explicit tool scope such as permissions or allowed-tools. In an agent ecosystem, this can lead to overbroad execution or ambiguous trust boundaries, making it easier for the skill to access sensitive files or secrets without clear operator awareness.
The skill describes indexing and querying agent memory using an OpenAI-compatible API, but it does not clearly warn that memory contents are transmitted to a third-party model endpoint for embeddings and LLM processing. Because memory files may contain sensitive user data, credentials, or internal notes, this omission can cause unintended data exfiltration during normal use.
The troubleshooting section includes a destructive reset command that recursively deletes all files in the storage directory, but it is presented without an explicit warning or confirmation step. Users may copy and run it directly, causing accidental loss of indexed memory data and potentially deleting unintended files if the storage path is misconfigured.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
api_key = os.getenv("OPENAI_API_KEY")
if base_url is None:
base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
if not base_url.endswith("/v1"):
base_url = base_url.rstrip("/") + "/v1"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
api_key = os.getenv("OPENAI_API_KEY")
if base_url is None:
base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
if not base_url.endswith("/v1"):
base_url = base_url.rstrip("/") + "/v1"
The skill reads local workspace or user-provided files and sends their contents to an external embedding service via the OpenAI-compatible API. In a memory-management skill, this is expected functionality, but it still creates a real confidentiality risk because sensitive local data may be exfiltrated without an explicit warning, consent gate, or allowlist.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
def get_rag():
"""Create configured LightRAG instance."""
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
print("Error: OPENAI_API_KEY not set", file=sys.stderr)
The dependency lightrag-hku is unpinned, so installations may resolve to different versions over time, including vulnerable or breaking releases. In a memory/retrieval skill that likely processes external data and may run in shared agent environments, supply-chain drift increases exposure to known and future package vulnerabilities.
lightrag-hku
openai
python-dotenv
numpy
lightrag-hku has multiple known advisories, but no version is pinned, so there is no way to determine whether installation will select a safe or affected release. This is more concerning than a generic unpinned dependency because the package is central to the skill's memory, retrieval, and likely network-exposed behavior, making vulnerable versions potentially impactful.
The openai package is unpinned, which makes builds non-reproducible and can silently introduce insecure or incompatible versions. Although this alone is not direct code execution, it is a real supply-chain weakness because the runtime dependency selected at install time is not controlled.
lightrag-hku
openai
python-dotenv
numpy
python-dotenv is unpinned, allowing an installer to fetch any current release, including versions with security defects or behavioral changes. Since this package can influence environment loading and secret handling, version drift is undesirable in an agent skill context.
lightrag-hku
openai
python-dotenv
numpy
python-dotenv has known advisories and the manifest does not specify a version, so deployment may pull an affected release. Because this library may read or write environment-related files, vulnerable versions could affect secret management or local file safety depending on usage.
The numpy dependency is unpinned, which creates a reproducibility and supply-chain risk by permitting uncontrolled version selection. Even for a common library, unpinned installs can unexpectedly pull vulnerable or incompatible builds.
lightrag-hku
openai
python-dotenv
numpy
numpy has known historical advisories, and without version pinning it is impossible to verify whether the installed release is affected. In this skill, numpy is likely a supporting dependency rather than the primary attack surface, so the contextual danger is lower, but the supply-chain uncertainty is still real.