VIYUH BDR — Feature Test Handbook

For the testing team. One file: every implemented feature, what it does, *when it fires* (use case), and *how to test it*. Extension v0.9.103.


0 · Setup (once)

Services — all must be up:

for p in 4004 4005 3000 8090; do curl -s -o /dev/null -w ":$p %{http_code}\n" http://localhost:$p/; done
# 4004 backend · 4005 test range · 3000 dashboard · 8090 file host

Load the extension: chrome://extensions → VIYUH BDR → ↻ Reload (must read v0.9.103). If content scripts look stale after a manifest change, Remove + Load unpacked ~/Downloads/bdr-extension-unpacked.

Where to see a detection (any of these):

Response tiers (precision-first — most are WARN, not block):

TierWhat you seeMeaning
blockfull-page block / download cancellednear-zero-FP structural signal
warndismissible interstitial ("Proceed")medium confidence
banner / notifytop-right toastheads-up only

Test hosts — this Mac is 192.168.1.11; the *.192-168-1-11.nip.io hosts resolve to it. If the LAN IP changes (DHCP), re-point the test hosts + re-seed (ask the dev).


1 · Fast lane — prove every detection core (2 min, no browser)

cd /Users/resecsystems/Documents/viyuh-soar-backend_local
for t in bdr/tests/*.test.mjs bdr/tests/*-verify.mjs; do
  printf "%-40s " "$(basename "$t")"; node "$t" 2>&1 | grep -iE '[0-9]+ passed' | tail -1
done

Expect every line N passed, 0 failed except credreuse-range-verify.mjs (1 pre-existing cosmetic label). If any other file fails, a core regressed. This proves the *logic*; the sections below prove the *live wiring*.


2 · Phishing & AiTM / Token Theft (9 live)

Live range: http://localhost:4005/phishing/ · cores: node bdr/tests/{brandimp,homograph,aitm}-range-verify.mjs

FeatureWhat it doesUse case (fires when…)How to test
homographLook-alike / typosquat domainuser lands on paypa1.com, gооgle.com (Cyrillic)open a look-alike host on the phishing range → block/warn
brand-impersonationBrand login on a non-brand domain (+ S5 brand-as-subdomain)fake Microsoft/PayPal login on a random domainhttp://paypal.evil.192-168-1-11.nip.io:4005/iframe-login/inner-login.html → brand-subdomain WARN; okta.evil.* → silent
aitmReverse-proxy (Evilginx) credential relaya look-alike page harvesting the password same-originnode bdr/tests/aitm-range-verify.mjs (26/0); live needs a combosquat /etc/hosts entry
sso-cloneBrand SSO rendered as an image to defeat text scanners (OCR)a screenshot-of-a-login phishing pageopen an sso-clone fixture on the phishing range
bitbBrowser-in-the-Browser fake popup windowa fake "Sign in with Google" OS-window overlayopen the BITB fixture
qr-quishingMalicious QR in page/email/attachmenta QR linking to a phishing/scheme URLsee §6 (Malicious QR)
credential-reuseSame password reused across sitesuser types a known corporate password on an external sitetype a password on site A, then the same on site B
password-strengthWeak-password nudgeuser sets a weak passwordsubmit a weak password on a signup form
webmail-responseThreat response inside Gmail/Outlooka phishing indicator inside webmailopen a seeded phishing message in Gmail
S1 — iframe-loginCredential form inside a cross-origin iframephishing login embedded in an iframe to dodge top-frame scannershttp://192.168.1.11:4005/iframe-login/ → Card 1 fires; Card 2 (localhost) silent

3 · Web-Based Attacks / Malicious Websites (19 live)

Live range: http://localhost:4005/web-attacks/ · core: node bdr/tests/cat2-webattacks.test.mjs (155/0)

FeatureWhat it doesUse caseHow to test
phish-reputationKnown-bad site (threat-feed / lake)user opens a URL in the malicious IOC lakenavigate to a seeded lake domain → block/warn
suspicious-redirectsMalicious cross-domain redirect chainad/link bounces you through hops to a bad terminusmulti-hop redirect fixture; note: search-result clicks are excluded (no FP)
newly-registered-domainDomain registered < 30 daysphishing on a fresh throwaway domainopen an NRD fixture (corroborated with a clone → block)
free-hosted-site-isolationBrand-cue page on vercel/netlify/github.iopaypal-login.weebly.comfree-host fixture with brand cue
geo-blockingSite in a high-risk country (admin policy)connection to a blocked-country hostset a geo policy + open a host resolving there
social-referrer-isolationRisky site reached from social medialink opened from LinkedIn/Twitter to a bad sitenavigate with a social referrer
etld-typosquatTLD/suffix typosquat (.co vs .com)company.co impersonating company.comtyposquat fixture
unicode-domain-policyIDN / mixed-script look-alikeаpple.com (Cyrillic)IDN fixture → isolate/warn
canvas-content-filterPage-content / rendered-text filteringscam text rendered on the pagecontent fixture
content-category-filterGambling / adult / etc. categoryuser opens a gambling siteopen a known gambling/adult host → policyBlock
legit-service-phishingPhishing via hijacked SharePoint/Forms/Canvaa phishing form hosted on forms.office.comlegit-service fixture
multi-hop-phishingNavigation-path phishing chainseveral hops ending at a credential pagemulti-hop fixture
malicious-script-drivebyDrive-by download / malicious scriptauto-download of an exe on page loaddrive-by fixture
magecart-formjackingCard skimmer (script-host + live exfil)checkout page exfiltrating the card to a 3rd partyhttp://localhost:4005/magecart-exfil/ → skimmer buttons fire; same-origin/order-id stay silent
clickjacking-frameInvisible cross-origin overlaya transparent iframe hijacking clicksclickjacking fixture
malvertisingTech-support scam / fake alert page"your PC is infected, call this number" pagemalvertising fixture
*(policy)* isolate-free-hosted / isolate-all-idn / block-logins-from-trusted-servicesblunt admin-opt-in isolations/blocksadmin turns them onenable in policy, then the matching fixture

4 · Malicious File Analysis (12 live)

Live range: http://localhost:4005/file-analysis/ · core: node bdr/tests/file-analysis.test.mjs (46/0) · downloads via :8090

FeatureWhat it doesUse caseHow to test
file-download-hookIn-browser download inspection engineany download is sniffed (magic bytes/macro/hash)download any office/exe file
file-type-mismatchExtension ≠ real magic bytes (#17)evil.exe renamed update.pdfdownload a renamed executable → disguised-executable
macro-office-scan / vba-macro-detectionMacro-enabled Office doca .docm with an auto-run macrodownload the macro sample from the file range
file-size-filterOversize hard-cap (#19 dangerous → block even in warn-only)600 MB .iso over the capset cap=400 on /bdr/file-analysis, download :8090/big.iso → blocked; big.pdf → warn+delivered
encrypted-file-policyPassword-protected archivean encrypted .zip that can't be inspecteddownload an encrypted zip
file-threat-feedKnown-bad file hasha file whose SHA-256 is in the lakedownload a seeded-hash file
static-maldoc-triageRTF/OLE exploit-class doc (#37)equation-editor exploit RTFdownload the maldoc-RTF sample
archive-polyglot-inspectionQR/exploit inside an archive; polyglota zip bundling a malicious image/docdownload an archive sample
multi-engine-av / async-detonationMultiscan + sandbox (backend)admin escalates a suspicious hashtrigger from the file-analysis dashboard
inline-cdr (Threat Extraction)Rebuild a clean doc, strip active contenta PDF/Office with macros/JSdownload :8090/disguised-invoice.pdf (needs the CDR engine on :8000 to actually disarm — see §8)

5 · Malicious & Risky Browser Extensions (13 live)

Core (definitive): node bdr/tests/extensions-detect.test.mjs (10/0) · live via /bdr/extensions → Test tab (dev build only)

FeatureWhat it doesUse caseHow to test
extension-inventoryFull installed-extension list + permsadmin posture viewdashboard shows the inventory
permission-risk-analysisScores dangerous permission combosan ext with debugger/proxy/<all_urls>+cookiesTest tab → "risky" scenario
permission-creepUpdate silently adds risky perms (30-min re-scan)a benign ext turns malicious in an updateTest tab → creep1 then creep2
sideload-preventionOff-store install (admin opt-in block)a sideloaded .crxTest tab → "sideload"; set sideloaded:block to hard-block
ai-impersonation-extensionName poses as ChatGPT/Claude (#42 vendor-prefix can't launder)"ChatGPT Login Stealer"in the self-test: SecurePay: ChatGPT…+risky perms → flagged
extension-clone-impersonationCounterfeit of a popular ext (homoglyph)uBlоck (Cyrillic) cloning uBlock OriginTest tab → "clone"
extension-blocklist / allowlistAdmin block/allow by IDforce-remove a known-bad IDadd an ID to the blocklist
extension-reputationKnown-malicious IOC feedext ID in the campaign feedTest tab → "reputation"
ai-extension-data-theftAITOPIA-class data-theft familya known data-theft extensionTest tab → "aitopia"
negative-review-filter / unpopular-extension-blockLow rating / low installsa sketchy 180-install extTest tab → "negreview" / "unpopular"
#5 broad-host+unpopular<all_urls> on an unpopular, non-reputable extcontent-script data-stealer surfaceself-test: unpopular <all_urls> → WARN; uBlock-class silent
#51 test-scenario prod-gateSynthetic injection only on DEV buildprevents a stray write blinding the scanneron a packed build the Test tab is inert

6 · Malicious QR Codes (4 live)

Live range: http://localhost:4005/qr/ · core: node bdr/tests/malicious-qr.test.mjs (25/0)

FeatureWhat it doesUse caseHow to test
dangerous-scheme QR (#38)javascript: / data: / etc. QRa QR that runs a scheme payloadscan qr-scheme-js on the QR range → flagged
short-link unfurl (#39)Expands shortened QR targetsQR → bit.ly/… hiding a bad URLscan the shortener QR → unfurled + judged
open-redirect (#40)Resolves ?url= even on good hostsQR → google.com/url?q=evilscan the open-redirect QR
rotation-tolerant (#41)Decodes 90/180/270°-rotated QRsattacker rotates the QR to dodge the decoderhttp://localhost:4005/qr/rot.html → rotated QR still fires

7 · In-Browser DLP & Shadow-AI (~45 live)

Live range: http://localhost:4005/dlp/ · admin console: http://localhost:3000/bdr/dlp · core: node bdr/tests/dlp.test.mjs (129/0) · full case list: bdr/testing/dlp/DLP_TEST_CASES.md

Too many to list per-row; the headline ones the testing team should hit:

FeatureWhat it doesUse caseHow to test
paste/upload DLP + anti-evasion (#1)Blocks secrets (cards/SSN/AWS keys) leaving to AI/webmail — incl. base64/hex/split/homoglyph evasionuser pastes an AWS key into ChatGPT (even encoded)paste a real/encoded AWS key into a GenAI box → blocked
force-block completed secret (#7)A full vendor key hard-blocks regardless of policy modecopy 19 chars, type the 20th → still blocksbuild a full AKIA… key across paste+type → blocked
ClickFix / paste-to-run (#47a)Page writes a shell command to the clipboard"copy this, press Win+R" malware lurehttp://localhost:4005/dlp/clickfix/ → heads-up
identity-aware upload (#47b)File → a personal (non-corporate) cloud accountuploading to a personal Drivehttp://localhost:4005/dlp/id-upload.html → JUSTIFY
sensitive-file download (#47c)Credential/config file downloadedgrabbing .pem/.env/.sqldownload :8090/secrets.env, /id_rsa.pem → WARN; report.csv → silent
magic-byte upload (#9)Renamed binary upload caught by contentsecrets.zip → data.dat uploadrename + upload a zip → blocked
beacon/WebSocket exfil (#10)Non-form exfil channelsdata smuggled via sendBeacon/WSexfil during a block window

Enforcement mode + sanctioned/corporate/restricted host lists are all set on /bdr/dlp.


8 · Insider Threat & Last-Mile Control (5 live)

Admin console: http://localhost:3000/bdr/insider · cores: node bdr/tests/{last-mile,jit-access,ueba}.test.mjs (18/14/9). Demo policy is live: sensitive app sensitive-app.192-168-1-11.nip.io, JIT app jit-app.192-168-1-11.nip.io.

FeatureWhat it doesUse caseHow to test
watermarkingTiled identity overlay on sensitive screensdeter screenshot/screen-share of confidential datahttp://localhost:4005/dlp/watermark/ → overlay in ~1–3 s
last-mile-controlsBlock copy/cut/paste/print/right-click/save/drag/save-as/download on designated sensitive appsinsider copying/printing/exfiltrating from an internal apphttp://sensitive-app.192-168-1-11.nip.io:4005/insider/lastmile/ → each action blocked + toast
jit-accessReason interstitial + timed grant on protected appsforce a justification before opening payroll/vaulthttp://jit-app.192-168-1-11.nip.io:4005/insider/jit/ → enter reason to proceed (clear bdr_jit_grants to re-trigger)
session-recordingPrivacy-safe activity timeline (metadata only)forensic "who did what, when" trailSW console: chrome.storage.local.get('bdr_session_timeline').then(console.log)
uebaExfil-burst / last-mile-burst anomaliesdeparting/compromised user grabbing everything fastdownload 6+ files from :8090 in a minute → "Exfil-burst" on /bdr

Configure all of the above (sensitive apps, per-action mode, JIT hosts, UEBA thresholds, watermark) from /bdr/insider.

Known limits (honest — for the testing team's report): last-mile controls & the JIT/watermark overlays are *client-side*, so a determined insider with DevTools can remove an overlay or use a channel not yet hooked (async clipboard API from the console, view-source, disabling JS, a second browser). UEBA's burst detector catches *fast* exfil; a patient "low-and-slow" drip below the threshold needs the cloud-baseline tier (roadmap). These are architectural limits of any browser-extension control — true enforcement needs the endpoint agent / managed policy.


8b · Threat Extraction (CDR) — inline-cdr

Downloads of Office/PDF/email/archives are intercepted and rebuilt clean (active content stripped).


9 · Roadmap — NOT yet implemented (do not test)

These catalog categories are planned but not built — no detections will fire:


10 · Regression tripwires (run after any change)

Precision-first = no new false positives. These must stay green:

node bdr/tests/legit-domains-fp.test.mjs      # 66/0 — real brands never flagged
node bdr/tests/brandimp-range-verify.mjs      # 29/0 — incl. S5 okta/github SILENT
node bdr/tests/extensions-detect.test.mjs     # 10/0 — uBlock-class silent
node bdr/tests/dlp.test.mjs                    # 129/0 — prose/UUID clean

Full suite: for t in bdr/tests/*.mjs; do node "$t"; done → all green except the 1 known credreuse cosmetic label.

*Companion docs: LOOPHOLE_TEST_GUIDE.md (52-loophole one-by-one) · LOOPHOLE_FIXES.md (fix catalog) · the live launcher http://localhost:4005/ links every test page.*