T Techclick ← Interview hub

Lessons · Cortex XSOAR series · Interview

Palo Alto · Cortex XSOAR · Interview lesson

XSOAR interview questions with evidence

The ticket says phishing incident #12481 closed as benign while the VirusTotal task is red and http://203.0.113.50/login has no DBotScore. The weak answer is “disable the playbook” or “Continue on error everywhere.” The strong answer names Work Plan error → War Room entry → missing DBotScore.ScoreisError branch, then an approval gate before any PAN-OS / XDR contain. This page trains that sentence.

20 min read · L2 primary · 8 scenarios · 6-question quiz

Quick Answer

Cortex XSOAR interview questions and answers (2026) that also teach: fetch → classifier (incident type) → incoming mapper (fields) → type-attached playbook → tasks that write War Room + context. A close is not a close until DBotScore.Score exists or an isError branch held the case. Containment is a manual/collection approval, not a reputation timeout. Prove it on incident #12481 / playbook pb_phish_lab / instance vt_lab.

After this page you can

Say this out loud

Mail instance mail_lab fetches a message. Classifier sets type Phishing. Incoming mapper fills fields. Type-attached playbook pb_phish_lab autoruns. Reputation writes DBotScore into context and a War Room entry. If VirusTotal errors, a conditional on isError or missing DBotScore.Score holds the case — I do not closeInvestigation. Isolate / PAN-OS tag waits on a manual approval entry. I prove it on incident #12481, not on the dashboard colour.

1. Ticket hook — closed while VT is red

Night shift. Phishing queue shows #12481 Closed — benign. Work Plan still has a red url task against http://203.0.113.50/login. Context has no DBotScore. A junior wants the playbook disabled “so cases stop auto-closing.” Another wants Continue on error on every task. A third will isolate the mailbox from the same reputation step.

That is the interview. A close without score is a silent miss. Continue on error without an isError branch is the same miss with a green playbook. Auto-contain on a timeout is a self-inflicted IR event. Disable playbook is not a workaround — it is turning the SOAR off.

Hero · who talks to whom
Endpoint agent sending telemetry into a Cortex brain, which opens an incident card for an endpoint anomaly
Mood of ingest. Exact XSOAR objects are not “the brain.” They are the integration instance, classifier, incoming mapper, and the incident type that attaches pb_phish_lab. An XDR agent alert still dies in Unclassified if that chain is wrong.
Hard words, once

Classifier — picks the incident type from incoming JSON. Incoming mapper — maps JSON keys onto incident fields (unmapped keys sit in incident.labels). Incident type — layout + attached playbook + SLA. Playbook — orchestrates tasks. Automation — script (Set, filters, transforms). Integration command — vendor action, e.g. !url on instance vt_lab. War Room — chronological entries (commands, notes, files, errors). Context — per-incident JSON; quote DBotScore.Score (0 unknown, 1 good, 2 suspicious, 3 bad), DBotScore.Vendor, DBotScore.Type. Work Plan — playbook task states. Continue on error — task Advanced; only safe with a following isError / missing-score branch. Manual / collection task — the approval gate. Pre-process rule — drop / drop-and-update before the incident exists.

2. Mental model: five objects, one case

Interviewers mix “SOAR” with “SIEM” and “EDR” on purpose. XSOAR does not detect the phish. It classifies what an integration fetched, maps fields, runs the type’s playbook, and records every automated or human action. A content pack on Marketplace with no instance inspects nothing. A playbook on a type that never matches never runs.

What XSOAR owns

Incident object, type, layout, playbook version, context JSON, indicators, War Room audit, jobs, RBAC on who may approve isolate. DBotScore is how reputation becomes a number the playbook can branch on.

What the engineer owns

Which instance fetches, whether classifier + mapper were tested on a sample, which playbook is attached, whether error paths exist, and the War Room entry that proves the last action — before anyone hits Close.

Path · alert has to land somewhere
User traffic splitting through a cloud edge toward the internet and an internal app
Mood of “the alert came from a real path.” Exact XSOAR path is fetch → classify → map → playbook, in the SVG below — not this cloud fork. Mail, XDR, or SIEM is just the left-hand instance.

Lab tree you should be able to draw cold:

3. Ingest order and the error branch

Flowchart first. Recite this order; do not skip classifier, and do not skip the failure path.

Flow 1 · incident #12481 through pb_phish_lab
mail_lab Fetches incidents Classifier type = Phishing Incoming mapper fields, not labels Type playbook pb_phish_lab War Room #12481 entries 1 Extract URL / hash / email 2 Enrich !url vt_lab → DBotScore 3 Condition isError · Score 4 Approve then panos_lab A close needs score or a held error — miss both and you closed a blind case DBotScore 0 unknown · 1 good · 2 suspicious · 3 bad. Close as benign only on 1 with a War Room entry. Score 3 waits on approval. Unclassified type: playbook never attached. Mapper miss: fields empty, labels full. Pre-process drop: incident never existed. Quote Work Plan task state + War Room error + Context DBotScore.Score. The Closed badge is not a reputation result. Editor ≠ data path. Version pb_phish_lab, test on a sample incident, then attach on the Phishing type — do not edit production live.

Classifier picks type. Mapper fills fields. Playbook on the type writes War Room. A drop-close without DBotScore is the failure this page exists for.

Flow 2 · failed enrichment ladder
1 Work Plan red url task · vt_lab 2 War Room error timeout / 401 / 429 3 Context: DBotScore missing? isError · Score exists? Continue on error and no next branch closeInvestigation benign with no score Isolate / PAN-OS on the same task containment without approval Surgical fix — then re-run from the failed task Continue on error only on the reputation task. Next conditional: isError OR DBotScore.Score is empty → set EnrichmentFailed, assign, retry. Score 3 → approval → panos_lab. Fix vt_lab (Test, key, 429, engine) if the error is the instance. Do not disable pb_phish_lab to “stop bad closes.” Incident #12481 → Work Plan → War Room → Context Data. Then Settings → Integrations → Instances → vt_lab Test.

Start from the red Work Plan task. No DBotScore is not “benign.” A following isError branch is what makes Continue on error legal.

4. How to choose classifier, mapper, task type

Four tables. Interviewers mix them. Keep the verbs separate: classify, map, orchestrate, prove, approve.

Classifier vs mapper vs type vs playbook

ClassifierIncoming mapperIncident typePlaybook
Job Pick the type from the event Copy JSON keys into incident fields Layout, SLA, attached playbook Run tasks on that incident
If it fails Type Unclassified / wrong type; Work Plan empty or the wrong book Fields empty; data only in incident.labels No autorun, wrong layout Tasks error, skip, or close blind
Where you prove it Settings → Classification & Mapping → Test; incident Type field Same Test; Context / incident fields vs labels Settings → Objects Setup → Incident Types → Playbook Work Plan + War Room
Interview trap “The mapper picks the playbook” “Labels mean mapping worked” “Any type can run any book without attach” “Green Closed means enrichment ran”

Command vs automation vs playbook

Integration commandAutomationPlaybook
Example !url url=… using=vt_lab Set, filters, isError helpers pb_phish_lab + sub-playbooks
Use when One vendor action, structured outputs Transform, glue, calculate Order, conditions, approvals, loops
Trap Hard-coding one vendor when !url can fan out 40-line Python inside a conditional No error path; contain in the enrich task

Enrichment-only vs approval-gated vs auto-contain

Enrichment-onlyApproval-gatedAuto-contain
What runs Extract, reputation, ticketing, assign Same, then manual/collection, then PAN-OS / XDR Reputation task immediately isolates / tags
Choose when New pack, unproven instance, first 2 weeks Production IR — default for isolate, block, disable user Only after a named exception and a proven Score 3 path
Interview trap Leaving it forever (SOAR as a pretty SIEM) Approval with no War Room note (unauditable) Auto-isolate on timeout or Score 0

War Room vs Context vs Work Plan vs Indicators

PlaceWhat you quoteWhat it is not
War Room Command output, error text, analyst note, approval answer The dashboard tile
Context Data DBotScore.Score, Vendor, Type, URL.Data A screenshot of Closed
Work Plan Task completed / error / skipped / waiting Proof of reputation by itself
Indicators Reliability, verdict, linked incidents A substitute for the War Room error

5. Do: War Room + DBotScore + approval

Side A is the instance. Side B is the playbook branch. Side C is the close proof. Do not start at YAML.

  1. Side A — instance that should have fetched

    Settings → Integrations → Instances → mail_lab / vt_lab. Enabled. Fetches incidents on mail. Test. Read the last error. If Test fails, stop — the playbook is not the patient. Check engine vs cloud, key expiry, 429. Then Classification & Mapping → Test with a saved sample. Confirm type Phishing and mapped fields, not a labels dump.

  2. Side B — playbook error path

    On pb_phish_lab, reputation task Continue on error = on. Next task is conditional: isError OR DBotScore.Score empty → set EnrichmentFailed, assign, retry. Score 1 → close with reason. Score 2/3 → manual approval. Do not put panos-register-ip-tag on the reputation task. Version, run Playbook Debugger on #12481, then attach on the type.

  3. Side C — prove close or contain

    Re-run from the failed Work Plan task. Quote War Room error gone, Context DBotScore.Score present, approval entry if Score 3, then the PAN-OS / XDR command entry. Close reason matches the score. Original URL retest. Change record for the playbook version.

https://xsoar.lab.techclick.in/#/WarRoom/12481
Training mock · not live

Phishing · pb_phish_lab · Owner unassigned · Status Closed (benign) — wrong

War Room · evidence, not the badge

02:14 · mail_lab · incident created
Type still resolving… Classifier output should already be Phishing here.
02:14 · pb_phish_lab · !url using=vt_lab
url=http://203.0.113.50/login
02:15 · ERROR · vt_lab
Command failed: HTTP 429 / timeout. No DBotScore written. Continue on error = true. Next task was closeInvestigation.
02:15 · closeInvestigation
Reason: benign — illegal with no Score. Required next: conditional hold, not close.
(empty)
Error
Reopen Run from failed task

Training mock. Real console labels vary by XSOAR 6 vs 8, but the three quotes do not: Work Plan state, War Room error, Context DBotScore.Score.

Expected context after a healthy !url
{
  "URL": { "Data": "http://203.0.113.50/login" },
  "DBotScore": {
    "Indicator": "http://203.0.113.50/login",
    "Type": "url",
    "Vendor": "VirusTotal",
    "Score": 3
  }
}

# Score 3 → manual approval task → then panos_lab
# Score empty + War Room error → do not closeInvestigation
War Room / instance — then stop
# in the incident, not in a random dashboard
!url url="http://203.0.113.50/login" using="vt_lab"

# Settings → Integrations → Instances → vt_lab → Test
# never: disable pb_phish_lab
# never: Continue on error on every task + close as benign
# never: isolate in the same task as reputation
What “the playbook is actually in path” looks like

Instance fetches, classifier Test returns Phishing, mapper fills emailfrom / URL fields, type has pb_phish_lab attached, Work Plan shows extract → enrich → condition. A known-bad URL then either writes Score 3 and waits on approval, or a red task holds via isError. Empty Work Plan with “we installed the pack” is a classify/attach miss, not a clean mailbox.

6. Runtime path after go-live

After pb_phish_lab is attached, every new fetch still walks classifier → mapper → type → playbook. Pack updates do not magically add your error branch. Instance Test going red at 02:00 is how you get a queue of Closed-benign with empty scores — unless pre-process dropped the events first.

Proof · cockpit
Operator at a SOC desk reading a multi-track timeline and investigation graph on a wide monitor
Mood of the desk. Real proof is Work Plan + War Room + Context on #12481, not a pretty Gantt. You still quote DBotScore.Score and the approval entry in the runbook.

7. Eight interview scenarios

Q1 · Architecture — five objects, one dead case

Instance mail_lab shows last fetch 02:14. Incident #12481 exists, type Unclassified, Work Plan empty, War Room only “incident created.” Fetch succeeded. Why is investigation dead, and what sits in front of the playbook that a SIEM never had?

Direct answer
Classifier never set type Phishing, so the type-attached playbook pb_phish_lab never autoran. Order is integration fetch → classifier (type) → incoming mapper (fields) → incident type (layout + playbook) → tasks that write War Room and context. A SIEM stored the mail event. XSOAR has to classify it before any book runs. Empty Work Plan after a successful fetch is a classify/type miss, not “XSOAR is down.”
Why production cares
One source (EWS, XDR, QRadar) can feed many types. Wrong or missing classifier is how phishing lands on Unclassified and ages out. Installing a Marketplace pack does not attach a playbook to a type you never selected.
Weak answer / trap
“SOAR is a better SIEM” or “the mapper picks the playbook.” Mapper fills fields. Classifier picks type. Also: a playbook that exists in content but is not on the type inspects nothing.

Strong framing (say this)

Fetch worked. Classify failed. I quote Classification & Mapping Test and the Type field on #12481, not the green instance.

Evidence to name

Settings → Classification & Mapping → Test; incident Type; Incident Types → attached playbook; Work Plan empty vs War Room “created only.” Playbook lifecycle lesson.

Q2 · Compare — classifier vs mapper vs attached playbook

A junior says “fix the mapper so the phishing playbook runs.” Type is already Phishing. emailfrom is empty; the sender sits in incident.labels. Work Plan is running. Who is right, and what does each object own?

Direct answer
They are half right about data, wrong about the playbook. Classifier already did its job (type). Incoming mapper did not map sender onto the field the playbook reads — unmapped attributes stay in labels. The playbook is attached on the incident type (or the integration default type), not selected by the mapper. Fix mapping, then re-run from the extract task. Do not rewrite pb_phish_lab to parse labels.
Why production cares
Playbooks branch on fields. Labels are a junk drawer. This is how “the book ran but every condition was empty” shows up in interviews.
Weak answer / trap
“Mapper and classifier are the same screen so they are the same thing.” Same UI family, two jobs. Also: outgoing mapper is the reverse (XSOAR → ticket) — different ticket.

Strong framing (say this)

Classifier = type. Mapper = fields. Type = which book. I name which of the three is empty before I edit YAML.

Evidence to name

Classification & Mapping Test sample; field vs incident.labels; Incident Types → Playbook; Context Data after remap.

Q3 · Scenario — playbook closed while enrichment failed

#12481 is Closed — benign. Work Plan url task is Error against http://203.0.113.50/login. Context has no DBotScore. A junior wants pb_phish_lab disabled. First action — not a reboot, not “SOAR is broken.”

Direct answer
The playbook does not branch on failed enrichment or missing confidence. Open Work Plan, quote the War Room error (timeout / 401 / 429), confirm Continue on error. Add a conditional: isError OR missing DBotScore.Score → set EnrichmentFailed, assign, retry. Do not closeInvestigation as benign. Fix vt_lab Test if the instance is the error. Re-run from the failed task. Do not disable the playbook.
Why production cares
This is the classic XSOAR own-goal: automation looks “done” while the protected mailbox never got a verdict. Quiet closes train the SOC to ignore the platform.
Weak answer / trap
Disable the playbook, Continue on error on every task, or treat empty Score as good. Random tuning of conditions hides the failed stage.

Strong framing (say this)

Red task, no Score, no close. I will name the error entry and the missing DBotScore before I change a setting.

Evidence to name

Work Plan error; War Room error text; Context DBotScore absent; task Advanced Continue on error; vt_lab Test. Same failure the playbook-lifecycle lesson uses.

Q4 · Evidence — War Room, not a guess

An analyst says the URL was malicious so they isolated. Closed is green. A junior starts diffing playbook YAML against last week’s export. What do you open first, and which fields do you quote?

Direct answer
Incident #12481 → War Room for the !url / reputation entry and the isolate command; Context Data for DBotScore.Score, DBotScore.Vendor, DBotScore.Type, URL.Data; Work Plan for task state (completed vs error vs skipped vs waiting). Indicators tab for reliability. If Score is missing or the isolate has no approval entry, the close is not proven. YAML diffs waste the change window. If War Room has no reputation entry and Context is empty, reputation never ran — check instance, not the firewall.
Why production cares
War Room is the Support ID of SOAR: one thread from the user’s claim to one command. Auto-extract can skip printing reputation to War Room — that is why you still open Context.
Weak answer / trap
Trust Closed. Diff YAML first. Or “check the logs” with no object. Empty Context is not “the URL was clean.”

Strong framing (say this)

Give me #12481. I will quote Score, Vendor, Work Plan state, and the approval note before I talk isolate.

Evidence to name

War Room; Context DBotScore.*; Work Plan; Indicators. Calculate Severity By Highest DBotScore pack as the named severity pattern.

Q5 · Troubleshoot — queue went quiet at 02:00

No new phishing incidents since 02:00. pb_phish_lab is unchanged and still attached. Mail is flowing. First check, then the next two — not a playbook rewrite.

Direct answer
Settings → Integrations → Instances → mail_lab: enabled, Fetches incidents, last fetch timestamp/error, Test. Then pre-processing rules (Drop / Drop and update) that started matching. Then classifier mapping to a type with no autorun. Engine disconnected, API 401/429, or Fetches incidents unchecked are the usual 02:00 stories. Do not “run playbook on all incidents” as step one. Do not disable fetch to clear a backlog.
Why production cares
Silent fetch is an invisible outage. The playbook never gets a vote. You will waste the change window in YAML while mail piles up in the mailbox.
Weak answer / trap
Reboot the engine host first, or set every type’s playbook to autorun on Unclassified. Also: integrating a new API because fetch is quiet — more instances, same broken one.

Strong framing (say this)

Fetch, then pre-process, then classify. I will not edit pb_phish_lab until Test and last-fetch time are honest.

Evidence to name

Instances → Test / last error; Fetches incidents checkbox; Pre-Process Rules; Classification Test; engine status.

Q6 · Compare — command vs automation vs playbook

A developer wants a 200-line Python automation that fetches mail, scores URLs, and calls PAN-OS. A pack already exposes !url and a Phishing playbook. What belongs in which object, and when is the custom automation justified?

Direct answer
Integration command = one vendor action and context outputs (!url using=vt_lab). Automation = transform/logic (Set, filters, isError). Playbook = order, conditionals, sub-playbooks, manual approval. Use the generic !url so any reputation instance can fan in. Custom automation is for a transform the pack does not have — not for re-implementing fetch. Do not put isolate in the same automation as reputation.
Why production cares
Playbooks are auditable Work Plan. A monolith script is a black box with no isError branch you can screenshot in an interview.
Weak answer / trap
“Automations are always faster” or “we integrate every Marketplace pack because an API exists.” Integrate where an owner will act on the War Room output.

Strong framing (say this)

Command does I/O. Automation does math. Playbook does judgement and approval. I will not hide isolate inside Python.

Evidence to name

Task type on Work Plan (regular / conditional / manual / playbook); command outputs in Context; pack vs custom automation in Settings.

Q7 · Scenario — approval gate before contain

DBotScore.Score is 3 on http://203.0.113.50/login. CISO policy: no auto-block. The playbook still has panos-register-ip-tag on the next task, no person in the path. How do you gate it, and what is the unsafe shortcut?

Direct answer
Insert a manual or collection task (named approver / SOC lead) after Score 3. Write the decision to War Room. Only then run panos_lab or XDR isolate. Keep enrichment-only until that gate is proven in Dev. Version the playbook, Debugger on a sample, promote. Auto-contain on Score 0/empty or on the same task as reputation is the blast radius. Closing and “letting IR handle it later” drops the audit.
Why production cares
Containment is change control with a packet. XSOAR’s value is the approval + War Room note, not the API call you could have run from a laptop.
Weak answer / trap
A Slack ping with no task (unauditable), or setting the manual task to auto-complete. Also: disable the contain integration “so it cannot fire” — you just lost IR.

Strong framing (say this)

Score 3 waits. A named human writes yes in War Room. Then panos_lab. I will not isolate on a timeout.

Evidence to name

Work Plan waiting on manual; War Room approval entry; subsequent PAN-OS / core-isolate-endpoint entry; playbook version in content.

Q8 · Unsafe shortcut — Continue on error everywhere

A junior enabled Continue on error on every task so “incidents do not get stuck,” then closed 40 as duplicate overnight. Separately they disabled pb_phish_lab on the type to stop the noise. What do you undo, and which direction does each control face?

Direct answer
Re-attach pb_phish_lab on type Phishing. Continue on error stays only on flaky enrichment, and only with a following isError / missing-Score branch that holds. Reopen the 40: if War Room has no reputation and no duplicate-link pre-process hit, they were not duplicates. Disable-playbook is Transparent-forever — fetch still creates cases, nobody investigates. Duplicate-close is a pre-process / link job, not a blanket close. Do not “enable every pack unstaged.”
Why production cares
The expensive miss is a real phish in a Closed-duplicate pile. Continue on error without a branch is how you get there at 3 a.m. with a green Work Plan.
Weak answer / trap
Leave the book disabled and hunt in the SIEM. Or auto-complete manual tasks so nothing waits. Same class of mistake as day-one auto-isolate.

Strong framing (say this)

Continue on error is a fuse, not a master bypass. I re-attach the book, restore the error branch, and reopen anything closed without Score.

Evidence to name

Incident Types → playbook attached; task Advanced Continue on error; Work Plan error with no next conditional; War Room close reasons; pre-process rules for true dupes.

8. Traps and proof checklist

TrapWhat you seeSafer next step
Pack installed, type not classified Unclassified, Work Plan empty, fetch green Classification & Mapping Test → attach pb_phish_lab on Phishing
Mapper miss Fields empty, incident.labels full, conditions skip Map sender/URL fields; re-run extract
Playbook not attached Right type, no Work Plan Incident Types → Playbook; do not paste YAML into War Room
Failed enrichment still closes Red url task, no DBotScore, Closed benign isError / missing Score branch; never close
Continue on error everywhere Green book, silent misses Fuse only on reputation + a following hold
Disable playbook to stop noise Incidents pile, nothing investigates Fix the branch; keep the book attached
Auto-contain on the enrich task Isolate / PAN-OS on timeout or Score 0 Manual/collection approval after Score 3
Fetch quiet, YAML first No new incidents, book unchanged Instance Test, Fetches incidents, pre-process, engine
Integrate every API Twelve reputation vendors, no owner Integrate where War Room output has an owner
Trust Closed Badge green, Context empty War Room + DBotScore.Score + Work Plan state
Proof checklist (pilot / interview close)

Knowledge check

Six judgment items. Each maps to a promise bullet. Check answers, then reset and re-read the traps table if you miss any.

Q1

#12481 closed as benign. Work Plan url task is Error. Context has no DBotScore. Likely cause?

Correct: b. Failed enrichment must hold. Re-read Q3 + Flow 2.
Q2

Fetch is green. Type is Unclassified. Work Plan is empty. First object to fix?

Correct: a. No type, no attached book. Re-read Q1 + Q2.
Q3

An analyst claims the URL was malicious and they isolated. Fastest proof?

Correct: d. Three quotes, then the gate. Re-read Q4 + Q7.
Q4

VirusTotal timed out. No DBotScore. Correct playbook change?

Correct: c. Surgical branch, then re-run. Re-read Q3 + Q8.
Q5

DBotScore is 3. CISO forbids auto-block. How do you contain?

Correct: a. Gate, then command. Re-read Q7 + the enrichment vs contain table.
Q6

No new phishing incidents since 02:00. Playbook YAML is unchanged. First check?

Correct: b. Fetch before YAML. Re-read Q5 + the traps table.

Sources

Related: XSOAR playbook lifecycle · Cortex XDR architecture · Cortex XSOAR syllabus · Interview hub