T05 · Unauthorized Access and Privilege Escalation
- Location
src/main/java/com/teamtodo/api/ApiServer.java:77- Finding
Unauthenticated REST API Exposed on All Network Interfaces
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a real P-Todo integration, but it exposes powerful unauthenticated API access that can delete app data and may write exports to arbitrary files.
Review before installing or running this skill/app. It should only be used in a trusted local environment, ideally after changing the API to bind only to loopback, adding authentication, requiring explicit confirmation for deletes and user-management changes, and restricting exports to a safe directory. Do not run it on a shared or exposed network as-is.
src/main/java/com/teamtodo/api/ApiServer.java:77Unauthenticated REST API Exposed on All Network Interfaces
src/main/java/com/teamtodo/api/ApiServer.java:168Arbitrary File Overwrite Through the Export Endpoint
src/main/java/com/teamtodo/api/ApiServer.java:475Denial of Service Through Unbounded HTTP Request Bodies
src/main/java/com/teamtodo/util/DataExporter.java:46Spreadsheet Formula Injection in CSV Exports
The skill exposes a direct delete-todo endpoint with a user-supplied identifier and no mention of validation, scoping, or confirmation. In a skill that may be broadly triggered, this enables unintended or manipulated deletion of local application data.
GET /api/todos/{id} 获取单个待办 POST /api/todos 创建待办(body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} 更新待办 DELETE /api/todos/{id} 删除待办 POST /api/todos/{id}/complete 切换完成状态
The comment deletion endpoint allows direct destructive action based only on an ID, with no safety guidance or guardrails described. If the assistant is induced to pass attacker-chosen IDs, comments can be removed without adequate user awareness or verification.
GET /api/todos/{id}/comments 获取待办评论
POST /api/todos/{id}/comments 添加评论(body: {user_id, content})
DELETE /api/comments/{id} 删除评论
Deleting users is a high-impact administrative action, yet the skill documents it as a simple direct endpoint with no warnings or controls. This creates a clear tool-parameter-abuse risk if the assistant passes an incorrect or manipulated user ID.
GET /api/users 获取所有用户 POST /api/users 创建用户(body: {name}) PUT /api/users/{id} 更新用户 DELETE /api/users/{id} 删除用户
### 统计与搜索
This Traditional Chinese duplicate documents the same direct todo deletion path without safeguards. The localized repetition increases exposure because the same unsafe destructive pattern is available across languages.
GET /api/todos/{id} 取得單個待辦 POST /api/todos 建立待辦(body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} 更新待辦 DELETE /api/todos/{id} 刪除待辦 POST /api/todos/{id}/complete 切換完成狀態
This duplicate comment deletion endpoint presents the same risk of unverified destructive action by identifier alone. Localized availability does not reduce the danger; it broadens the situations in which unsafe deletion may be invoked.
GET /api/todos/{id}/comments 取得待辦評論
POST /api/todos/{id}/comments 新增評論(body: {user_id, content})
DELETE /api/comments/{id} 刪除評論
This user deletion endpoint again exposes a sensitive administrative action with no mention of privilege checks or confirmation. Incorrect routing or parameter injection could remove user records and disrupt the application.
GET /api/users 取得所有使用者 POST /api/users 建立使用者(body: {name}) PUT /api/users/{id} 更新使用者 DELETE /api/users/{id} 刪除使用者
### 統計與搜尋
The English documentation explicitly includes direct todo deletion by ID without any safety controls. In the context of a local productivity app, this threatens data integrity and is made worse by the broad trigger list elsewhere in the skill.
GET /api/todos/{id} Get single todo POST /api/todos Create todo (body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} Update todo DELETE /api/todos/{id} Delete todo POST /api/todos/{id}/complete Toggle completion
Direct comment deletion by ID is documented without safeguards, enabling accidental or manipulated destructive use. A model or user could supply the wrong identifier and irreversibly remove discussion history.
GET /api/todos/{id}/comments Get comments
POST /api/todos/{id}/comments Add comment (body: {user_id, content})
DELETE /api/comments/{id} Delete comment
Direct user deletion is particularly sensitive because it can affect accounts and ownership relationships, yet the skill describes it as a normal routine call. Without clear guardrails, the assistant may perform high-impact administrative changes too easily.
GET /api/users List users POST /api/users Create user (body: {name}) PUT /api/users/{id} Update user DELETE /api/users/{id} Delete user
### Statistics & Search
This Japanese duplicate again exposes unsafeguarded todo deletion by ID. Because the skill is multilingual, the lack of controls applies broadly and increases the operational risk of destructive mistakes.
GET /api/todos/{id} 単一タスク取得 POST /api/todos タスク作成(body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} タスク更新 DELETE /api/todos/{id} タスク削除 POST /api/todos/{id}/complete 完了状態切替
The Japanese comment deletion endpoint remains a direct destructive path without described constraints. That makes abuse or accidental invocation plausible if IDs are inferred or supplied incorrectly.
GET /api/todos/{id}/comments コメント取得
POST /api/todos/{id}/comments コメント追加(body: {user_id, content})
DELETE /api/comments/{id} コメント削除
This localized user deletion endpoint preserves the same high-impact administrative risk with no documented safeguards. Deleting users through a conversational skill should be treated as privileged, not routine.
GET /api/users ユーザー一覧 POST /api/users ユーザー作成(body: {name}) PUT /api/users/{id} ユーザー更新 DELETE /api/users/{id} ユーザー削除
### 統計・検索
The Korean section exposes direct todo deletion by ID with no guardrails. Given the broad activation terms, this combination materially increases the chance of unintended destructive operations on local data.
GET /api/todos/{id} 단일 할일 조회 POST /api/todos 할일 생성 (body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} 할일 수정 DELETE /api/todos/{id} 할일 삭제 POST /api/todos/{id}/complete 완료 상태 전환
Comment deletion in the Korean section is documented as a simple ID-based destructive call with no context verification. This can result in accidental or attacker-influenced removal of records.
GET /api/todos/{id}/comments 댓글 조회
POST /api/todos/{id}/comments 댓글 추가 (body: {user_id, content})
DELETE /api/comments/{id} 댓글 삭제
The Korean user deletion endpoint similarly lacks mention of role restrictions, review, or confirmation. Because user deletion is administrative, this is a significant misuse risk in a conversational tool setting.
GET /api/users 사용자 목록 POST /api/users 사용자 생성 (body: {name}) PUT /api/users/{id} 사용자 수정 DELETE /api/users/{id} 사용자 삭제
### 통계 및 검색
The French section again includes hard deletion of todos by identifier only, with no control guidance. This is dangerous because a conversation agent may select or receive the wrong ID and irreversibly alter user data.
GET /api/todos/{id} Obtenir une tâche POST /api/todos Créer une tâche (body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} Modifier une tâche DELETE /api/todos/{id} Supprimer une tâche POST /api/todos/{id}/complete Basculer l'achèvement
Direct comment deletion by ID remains an unsafe destructive pattern in the French locale as well. The skill context makes this more dangerous because the documented operations are intended for automated execution, not manual administrative review.
GET /api/todos/{id}/comments Obtenir les commentaires
POST /api/todos/{id}/comments Ajouter un commentaire (body: {user_id, content})
DELETE /api/comments/{id} Supprimer un commentaire
Deleting users through the French section is documented without any privilege or safety constraints. This can cause account disruption and associated data integrity problems if abused or mistakenly invoked.
GET /api/users Lister les utilisateurs POST /api/users Créer un utilisateur (body: {name}) PUT /api/users/{id} Modifier un utilisateur DELETE /api/users/{id} Supprimer un utilisateur
### Statistiques et recherche
The German section repeats the direct todo deletion endpoint without safeguards, preserving the same integrity risk. In combination with loose triggers, an unintended activation could lead to silent local data loss.
GET /api/todos/{id} Einzelne Aufgabe abrufen POST /api/todos Aufgabe erstellen (body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} Aufgabe bearbeiten DELETE /api/todos/{id} Aufgabe löschen POST /api/todos/{id}/complete Abschluss umschalten
The German comment deletion endpoint exposes an unguarded destructive operation based solely on an ID. This is risky in conversational automation where parameter selection may be ambiguous.
GET /api/todos/{id}/comments Kommentare abrufen
POST /api/todos/{id}/comments Kommentar hinzufügen (body: {user_id, content})
DELETE /api/comments/{id} Kommentar löschen
User deletion in the German section is a high-impact administrative action documented with no controls. Misuse could remove accounts and undermine application access or ownership structures.
GET /api/users Benutzer auflisten POST /api/users Benutzer erstellen (body: {name}) PUT /api/users/{id} Benutzer bearbeiten DELETE /api/users/{id} Benutzer löschen
### Statistiken und Suche
The Spanish section again documents direct todo deletion by ID without any warnings or validation requirements. This makes destructive misuse straightforward in an agent-mediated workflow.
GET /api/todos/{id} Obtener una tarea POST /api/todos Crear tarea (body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} Actualizar tarea DELETE /api/todos/{id} Eliminar tarea POST /api/todos/{id}/complete Alternar finalización
Comment deletion in the Spanish section is another unsafe ID-based destructive action lacking safeguards. Incorrect resolution of the target comment could irreversibly remove content.
GET /api/todos/{id}/comments Obtener comentarios
POST /api/todos/{id}/comments Añadir comentario (body: {user_id, content})
DELETE /api/comments/{id} Eliminar comentario
The Spanish documentation includes user deletion as a standard endpoint with no mention of privilege or confirmation. This is dangerous because account-level destructive actions should not be casually exposed through broad conversational triggers.
GET /api/users Listar usuarios POST /api/users Crear usuario (body: {name}) PUT /api/users/{id} Actualizar usuario DELETE /api/users/{id} Eliminar usuario
### Estadísticas y búsqueda
The Portuguese section also exposes direct todo deletion without controls, continuing the same destructive misuse risk. Localhost scope reduces internet exposure but not the risk of local data loss through accidental or manipulated invocation.
GET /api/todos/{id} Obter uma tarefa POST /api/todos Criar tarefa (body: {title, description, priority, assignee_id, due_date, tags}) PUT /api/todos/{id} Atualizar tarefa DELETE /api/todos/{id} Excluir tarefa POST /api/todos/{id}/complete Alternar conclusão
No suspicious patterns detected.