| name | theme-support_ticketing |
| description | Support / ticketing application palette: variants, pages, entities, and flows for building a varied helpdesk app. Use when theme_preset is support_ticketing.
|
Support / ticketing theme
Domain
Apps where requesters file tickets and agents work them through a queue. The
boundary between a requester (sees only their own tickets) and an agent (sees
all), plus free-text fields and attachments, are where the exploits live.
Application variants โ pick ONE per lab
Honor any hint in theme_free_text / custom_prompt; otherwise pick one.
- Customer helpdesk โ external customers raise tickets, agents respond.
- Internal IT service desk โ employees request IT help; SLAs, categories.
- Bug tracker โ reporters file issues, devs triage, statuses & labels.
- Live-chat support โ chat sessions converted to tickets, canned replies.
- Knowledge base + tickets โ self-serve articles plus ticket fallback.
- Field-service dispatch โ work orders, technicians, scheduling, on-site status.
- Community Q&A support โ public questions, answers, accepted solutions, voting.
Roles โ choose the set that fits the variant
- user (requester/customer) โ create tickets, view/comment on own tickets.
- agent โ view/assign/respond to all tickets in their queues.
- admin โ manage agents, queues, categories, settings.
Most exploits run as user (requester).
Candidate pages โ select a coherent subset
Size the subset to endpoint_count. Candidates: dashboard/overview, my tickets,
ticket detail, new ticket, search, knowledge base, article detail, agent
queue/inbox, ticket assignment, internal notes, status/priority controls,
canned responses (live-chat), live-chat window / session list (live-chat),
SLA / categories (IT desk), labels / components / severity (bug tracker),
reports/SLA dashboard, profile/settings, notifications, admin queues/agents/categories.
Candidate entities (seed tables) โ select what the variant needs
- users โ id, email, password_hash, role
- tickets โ id, requester_id, assignee_id?, subject, body, status, priority, queue_id, category_id?, created_at
- comments โ id, ticket_id, author_id, body, is_internal, created_at
- attachments โ id, ticket_id, comment_id?, filename, path, content_type
- queues โ id, name, description
- notifications โ id, user_id, ticket_id, kind, read_at
IT service desk (variant):
- slas (variant) โ id, priority, response_minutes, resolve_minutes
- categories (variant) โ id, name, parent_id?, default_queue_id?
- assets (variant) โ id, name, type, owner_user_id (CMDB items a ticket references)
Bug tracker (variant):
- labels (variant) โ id, name, color
- ticket_labels (variant) โ ticket_id, label_id
- components (variant) โ id, name, owner_team
- severity (variant) โ id, ticket_id, level, is_regression
Live-chat support (variant):
- chat_sessions (variant) โ id, requester_id, agent_id?, status, started_at, ended_at, ticket_id?
- chat_messages (variant) โ id, session_id, author_id, body, created_at
- canned_responses (variant) โ id, owner_id?, shortcut, body, is_shared
Knowledge base (variant):
- kb_articles (variant) โ id, title, body_html, published, author_id, category_id?
- kb_feedback (variant) โ id, article_id, user_id, helpful, comment?
Seed tickets owned by โฅ2 different requesters (some assigned, some not) so
cross-customer access is testable.
Candidate user flows โ select the ones matching chosen pages/features
- New ticket โ submit (with attachment) โ see it in my tickets.
- Open my ticket โ add a comment โ read agent reply.
- (agent) Open the queue โ assign a ticket to self โ reply / add internal note.
- (agent) Change status/priority โ merge or reassign tickets.
- Search the knowledge base โ open an article โ mark it helpful/not (knowledge base).
- (admin) Manage queues, agents, and categories.
- (IT desk) File a request against a category โ SLA timer starts โ agent resolves within target.
- (bug tracker) File a bug โ triage with labels/component/severity โ move through statuses to closed.
- (live-chat) Start a chat session โ agent answers with a canned response โ escalate the chat into a ticket.
- (admin/agent) Author or edit a canned response / KB article โ it becomes available to agents.
Candidate endpoints โ a feature may span several
Endpoints are a shared surface, not owned 1:1 by a feature (a single feature
often spans several, and an endpoint can back multiple features). Pick a coherent
subset alongside the pages above. Grouped by area:
- tickets โ
GET /api/tickets, GET /api/tickets/{id}, POST /api/tickets, PATCH /api/tickets/{id}
- comments / attachments โ
POST /api/tickets/{id}/comments, POST /api/tickets/{id}/attachments, GET /api/attachments/{id}
- triage โ
POST /api/tickets/{id}/assign, POST /api/tickets/{id}/status, POST /api/tickets/{id}/merge
- kb (knowledge base) โ
GET /api/kb, GET /api/kb/{id}, POST /api/kb/{id}/feedback
- sla / categories (IT desk) โ
GET /api/slas, GET/POST /api/categories
- labels / components (bug tracker) โ
GET/POST /api/labels, POST /api/tickets/{id}/labels, GET /api/components
- chat (live-chat) โ
GET/POST /api/chat/sessions, POST /api/chat/sessions/{id}/messages, GET/POST /api/canned-responses
- search โ
GET /api/search?q=, GET /api/tickets?queue=&status=
- admin โ
/api/admin/queues, /api/admin/agents, /api/admin/categories
Where vulnerabilities fit naturally
- idor โ
GET /api/tickets/{id} belonging to another customer; reading internal-only comments or /api/attachments/{id} as a requester.
- xss โ ticket subject/body and comments rendered in the agent console (stored XSS hitting a privileged viewer); KB article HTML.
- file_upload โ ticket attachment accepting an executable/script.
- privilege_escalation โ requester gaining agent/admin to read all tickets or post internal notes.
- business_logic โ reassign/close another agent's ticket, escalate priority to bypass SLA, view internal notes via the public ticket view, escalate a chat into a ticket you shouldn't own.
- sqli โ ticket search / queue filter parameters.
Diversity guidance
Pick ONE variant and a coherent subset โ a bug tracker and a live-chat desk
diverge sharply. Size to endpoint_count; let theme_free_text /
custom_prompt bias the variant and naming. Vary queues, statuses, and whether
a knowledge base exists so two ticketing labs feel like different products.