Skip to main content
Coverage class · Desktop

Thick client penetration testing takes the binary and the traffic

A desktop application is code running on a machine its owner controls, which makes every check inside it advice rather than enforcement. B-52 works the package you distribute — what it contains, what it writes to the machine — and then works the protocol, because the finding is never that a check can be removed. It is that the server relied on it.

Class and boundary

Four kinds of desktop application, and the wire between them

A thick client is anything that runs locally and talks to a server. The runtime changes what can be recovered from it; it does not change the question being asked.

Windows native

.NET, C++ and Win32

Managed and unmanaged binaries: what the assembly gives up when it is decompiled, what the process holds while it runs, and what the installer put on disk and with which permissions.

Java desktop

Swing, JavaFX and applets

Bytecode that decompiles very close to source, archives whose signature is checked once and trusted thereafter, and configuration shipped alongside the application rather than fetched.

Electron and web-wrapped

A browser with the rails taken off

A desktop application built out of web technology, where the renderer can reach the operating system and the package is a filesystem that anybody can open and read.

Every one of them

The protocol, and what stays on the machine

What the client sends and what the server trusts it for; and what is cached, logged, written to the registry or left in a temporary file, including what is still there after a logout.

Who this page is for

Two readers, and one of them inherited the application

Both are answered here. Where they should start is not the same.

01 Legacy

The team maintaining something older than the programme

What brought them
A desktop application that predates the security programme it now has to fit inside, still in production because replacing it is a project nobody has funded.
What they need
To know which of its assumptions the server is still relying on. Start at technical depth and at the worked example.
What they check first
Whether the assessment needs source, and whether it needs a build the team would have to make specially.
02 Filing

The buyer whose scope says applications and means all of them

What brought them
A testing cycle covering applications, and a desktop terminal or branch application that has never been in one.
What they need
A report that treats the desktop client as an application rather than as an exception. Start at the regulatory mapping.
What they check first
Which delivery model produces a signable report. Coverage is identical across all three.

By phase

How a thick client run works, phase by phase

The phase names are the platform’s. On this class two of them run against different material — one against the package, one against the wire — and the findings come from comparing the two.

PhaseWhat entersWhat leaves
Discovery The installer or package exactly as you distribute it. What it writes to the machine, what it registers, what it talks to, and which runtime it was built on — read from the artefact rather than from a document describing it.
Planning The surface discovery found. A test plan for this client: which local artefacts, which protocol operations, which trust assumptions. Signed off in writing before anything is exercised.
Scanning The binary, and the traffic it produces in normal use. Candidates from both. Nothing leaves this phase as a finding, and nothing is reported from it.
Exploitation A candidate, and a client that can be made to behave differently. A finding where the server accepted what a modified client sent, and a drop where it did not. On this class that distinction is the whole assessment.
Reporting Confirmed findings. The artefact or the exchange that proved each one, with steps written for a machine your engineer controls.
QA The finished report. A gate that can send it back to reporting. It is where a client-side control that was only ever advisory is separated from a server-side control that failed.

Discovery

What enters
The installer or package exactly as you distribute it.
What leaves
What it writes to the machine, what it registers, what it talks to, and which runtime it was built on — read from the artefact rather than from a document describing it.

Planning

What enters
The surface discovery found.
What leaves
A test plan for this client: which local artefacts, which protocol operations, which trust assumptions. Signed off in writing before anything is exercised.

Scanning

What enters
The binary, and the traffic it produces in normal use.
What leaves
Candidates from both. Nothing leaves this phase as a finding, and nothing is reported from it.

Exploitation

What enters
A candidate, and a client that can be made to behave differently.
What leaves
A finding where the server accepted what a modified client sent, and a drop where it did not. On this class that distinction is the whole assessment.

Reporting

What enters
Confirmed findings.
What leaves
The artefact or the exchange that proved each one, with steps written for a machine your engineer controls.

QA

What enters
The finished report.
What leaves
A gate that can send it back to reporting. It is where a client-side control that was only ever advisory is separated from a server-side control that failed.

The question underneath

The client is not a trusted party. The test is whether the server agrees

Almost every thick client finding reduces to one question: what does the server believe because the client told it so? The licence state, the role, the price, the account number, the amount — each of them is checked somewhere in the application, and every one of those checks is running on hardware the user owns. Establishing that a check can be removed is easy, and on its own it is not a finding; it is a property of desktop software. Establishing that removing it changes what the server does is the finding. That is why this class is worked against the protocol as well as against the binary, and why a report that only lists what the package gives up has stopped one step short.

The boundary

Three actions wait for your written approval

The same three as every coverage class. On this one most of them barely arise, because the assessment runs on a machine we control — and the block below says what happens when that is not enough.

Three actions wait for your written approval
StateWhat it meansWhat follows
Destructive or state-changing actions Anything that creates, alters or removes a record on the live server behind the client, rather than demonstrating that a modified client could have made it do so. Stops and waits, in writing.
Live credentials or real customer data A desktop client caches more than most people expect, and what is on the disk of a machine a real user has logged into is real data. Test accounts on a test machine avoid this entirely. Stops and waits, in writing.
Persistence and movement past the entry host Where a client finding yields execution on the machine, going any further is an internal network question rather than an application one. Stops and waits, in writing.
Everything else inside the authorised scope Terminal Unpacking and analysing the distributed application, observing and modifying what it sends, reading what it writes locally, chaining and reporting. Runs without asking.
Key
  • Requires your written approval before B-52 proceeds
  • Authorised by the scope you signed off
  • TerminalNo state follows this one

Where the assessment runs

On a machine we control, with accounts you created for it

That arrangement is why the gates above rarely come up on this class: there is no real user profile to read and no production record to alter. It matters for a second reason too — a finding established on a clean machine with a known build is a finding your engineer can reproduce, and a finding recovered from somebody’s working laptop usually is not. Where something can only be established on a machine that has been in real use, that is a scoping conversation held beforehand rather than a decision taken during a run.

What the assessment reaches

Where the defects in a desktop application live

Two of these are the class. The rest are the ones that turn a client finding into a server one.

ClassWhat it looks like in a real application
Checks the server relies on the client to make A restriction enforced in the interface and nowhere else — a disabled control, a role the menu hides, a value the form will not let you type. Removing it is trivial. Whether the server notices is the finding.
The protocol between client and server What the client sends, what the server will accept from it, and whether a message the official client would never construct is honoured anyway.
What the package gives up Endpoints, credentials, keys and logic recovered from the distributed artefact. Managed and bytecode runtimes give up nearly everything; native builds give up less, and seldom nothing.
Local storage and leftover artefacts Configuration, caches, logs, registry values and temporary files: what is written, in what form, readable by which accounts on the machine, and what survives a logout.
Credentials and sessions on the device Where a token or a password lives between sessions, and what protects it beyond whatever the operating system does by default.
Update and integrity How the application decides an update is genuine, where it fetches one from, and what it does when that decision cannot be made.
What was bundled with it Third-party components inside the package, at the versions actually shipped rather than the versions the build was meant to pin.
Privilege at install and at run What the installer grants, what the application asks for afterwards, and whether either is more than the work it does requires.

Checks the server relies on the client to make

What it looks like in a real application
A restriction enforced in the interface and nowhere else — a disabled control, a role the menu hides, a value the form will not let you type. Removing it is trivial. Whether the server notices is the finding.

The protocol between client and server

What it looks like in a real application
What the client sends, what the server will accept from it, and whether a message the official client would never construct is honoured anyway.

What the package gives up

What it looks like in a real application
Endpoints, credentials, keys and logic recovered from the distributed artefact. Managed and bytecode runtimes give up nearly everything; native builds give up less, and seldom nothing.

Local storage and leftover artefacts

What it looks like in a real application
Configuration, caches, logs, registry values and temporary files: what is written, in what form, readable by which accounts on the machine, and what survives a logout.

Credentials and sessions on the device

What it looks like in a real application
Where a token or a password lives between sessions, and what protects it beyond whatever the operating system does by default.

Update and integrity

What it looks like in a real application
How the application decides an update is genuine, where it fetches one from, and what it does when that decision cannot be made.

What was bundled with it

What it looks like in a real application
Third-party components inside the package, at the versions actually shipped rather than the versions the build was meant to pin.

Privilege at install and at run

What it looks like in a real application
What the installer grants, what the application asks for afterwards, and whether either is more than the work it does requires.

Three of them, worked

The same finding, on the machine and on the wire

Each of these is unremarkable on one side and decisive when the two sides are put together.

01 Enforcement

A check that exists only in the interface

On the machine
A control the application disables, or an option the menu does not draw for this role.
On the wire
The request the enabled control would have sent, constructed and sent anyway.
What the run does
Sends it, and reports the finding only if the server acted on it. A removable check that changes nothing is a property of desktop software, not a defect.
02 Disclosure

A secret inside the package

On the machine
A key, a token or a connection string recovered from the distributed artefact.
On the wire
Whether anything still accepts it, and as whom.
What the run does
Reports the disclosure on the evidence of the package, and establishes what it still authenticates as only where you have authorised that.
03 Residue

What is left after the user logs out

On the machine
A cache, a log or a registry value written during the session and not cleared at the end of it.
On the wire
Nothing. This one is invisible to any assessment that only watches traffic.
What the run does
Reads the machine before, during and after a session, and reports each artefact with its location and the accounts that can read it.

Methodology

The standards a desktop assessment is worked against

There is no desktop counterpart to the mobile testing standard. Rather than cite something that does not fit, the methodology is assembled from the general verification standard and the report names which requirement each finding fails.

StandardVersionWhat it carries here
OWASP ASVS 5.0.0, May 2025. 17 categories The verification requirement a finding fails. Most of the standard is about what the server must not delegate, which is exactly the question this class asks.
The first major release in six years; 4.0.3 is superseded.
CWE Current The weakness identifier on every finding, so a desktop defect can be tracked in the same register as a web one.
NIST SP 800-115 Final, September 2008. Read 2026-09-13 The structure of a technical assessment, and the handling rules for what the attack phase turns up.
Still the current edition: it has been neither withdrawn nor superseded.
CVSS v4.0, November 2023. Read 2026-09-13 The severity vector on every finding, so your team can recompute against its own environmental metrics instead of taking ours.

OWASP ASVS

Version
5.0.0, May 2025. 17 categories
What it carries here
The verification requirement a finding fails. Most of the standard is about what the server must not delegate, which is exactly the question this class asks.

The first major release in six years; 4.0.3 is superseded.

CWE

Version
Current
What it carries here
The weakness identifier on every finding, so a desktop defect can be tracked in the same register as a web one.

NIST SP 800-115

Version
Final, September 2008. Read 2026-09-13
What it carries here
The structure of a technical assessment, and the handling rules for what the attack phase turns up.

Still the current edition: it has been neither withdrawn nor superseded.

CVSS

Version
v4.0, November 2023. Read 2026-09-13
What it carries here
The severity vector on every finding, so your team can recompute against its own environmental metrics instead of taking ours.

Before a run starts

What is fixed in writing, and what is never in scope

The scope agreement for a thick client engagement As of 2026-09-13
  • The application exactly as distributed — the installer or package your users receive, at a stated version.
  • A test account for every role whose boundary matters, and whether the server side is inside the same engagement. A client finding that cannot be put to the server is half a finding.
  • Which platform and runtime versions are supported, because a client that still runs on an older one is still in scope for whoever is running it.
  • Whether the client talks to anything besides your own server, and what is in scope of those.

Deliberately excluded

  • Physical, hardware and wireless testing, which are out of scope for the platform in every class.
  • Denial of service, which is not performed against a production system.
  • The operating system the client runs on, which is host and internal network work rather than application work.

Per finding

What arrives with every finding

Always

The artefact, or the exchange

For a protocol finding, the message as sent and the response as returned. For a local finding, the file, key or value itself — with its path and the accounts that can read it.

Always

The build it was established on

Platform, runtime and application version. A desktop finding that does not say which build it was found on cannot be retested against the build that claims to fix it.

Always

Steps that reproduce it

Written for a machine your engineer controls, and described by what has to be done rather than by which tool we happened to reach for.

Always

The classification

Severity with its CVSS v4.0 vector, the CWE, and the ASVS requirement the defect fails.

Fully autonomous only

An independent automated cross-check

In the model with no auditor in it, findings pass a second automated gate before they are reported. It is a check on top of the exploit, not a substitute for it.

Where this sits

Against what the desktop application usually gets instead

No vendor is named here — these are categories of work. The second column is the usual substitute, and it is the one worth being precise about.

Endpoint protectionTesting the server onlyA scheduled desktop engagementB-52
What it is looking at Known-malicious behaviour on the machine. The interface the client happens to call. The client and the protocol, for the days bought. The distributed package, what it writes locally, and everything it sends.
Sees a check that exists only in the client No. It is not a defect in its terms. Only where a tester thought to send what the official client would not. Yes. Yes, and then establishes whether the server relied on it.
Sees what is left on the machine after use Not as a finding. No. Yes. Yes, artefact by artefact, with the accounts that can read each one.
Coverage of the class Not a testing product. Excludes the client entirely. Whatever was scoped into the days. Windows native, Java desktop, Electron, and the protocol and local storage in each.
What a finding costs you to confirm Not applicable. Usually nothing; it was proved. Usually nothing; it was proved. Nothing. The artefact or the exchange arrives with it.
Whose signature it carries None. The firm that ran it. The firm that ran it. Security Brigade’s, in the two models with an empanelled auditor in them.

What it is looking at

Endpoint protection
Known-malicious behaviour on the machine.
Testing the server only
The interface the client happens to call.
A scheduled desktop engagement
The client and the protocol, for the days bought.
B-52
The distributed package, what it writes locally, and everything it sends.

Sees a check that exists only in the client

Endpoint protection
No. It is not a defect in its terms.
Testing the server only
Only where a tester thought to send what the official client would not.
A scheduled desktop engagement
Yes.
B-52
Yes, and then establishes whether the server relied on it.

Sees what is left on the machine after use

Endpoint protection
Not as a finding.
Testing the server only
No.
A scheduled desktop engagement
Yes.
B-52
Yes, artefact by artefact, with the accounts that can read each one.

Coverage of the class

Endpoint protection
Not a testing product.
Testing the server only
Excludes the client entirely.
A scheduled desktop engagement
Whatever was scoped into the days.
B-52
Windows native, Java desktop, Electron, and the protocol and local storage in each.

What a finding costs you to confirm

Endpoint protection
Not applicable.
Testing the server only
Usually nothing; it was proved.
A scheduled desktop engagement
Usually nothing; it was proved.
B-52
Nothing. The artefact or the exchange arrives with it.

Whose signature it carries

Endpoint protection
None.
Testing the server only
The firm that ran it.
A scheduled desktop engagement
The firm that ran it.
B-52
Security Brigade’s, in the two models with an empanelled auditor in them.

On testing the server instead

It is the usual substitute, and it answers a narrower question

Assessing the server the client calls is worth doing, and it is frequently all that gets done. What it leaves out is everything that is only true because a desktop application exists: what the installer wrote, what the package contains, what is cached after a session — and above all, what the server will accept from a client that has been changed. A test that only ever sends what the official client sends is measuring the client’s good manners rather than the server’s checks, and the two are not the same measurement.

Filing

What a desktop assessment is evidence for

Coverage is identical across the three delivery models. What differs is whose signature the report carries.

SEBI CSCRF

A desktop terminal is an application

Annexure L of the circular dated 20 August 2024 names applications alongside infrastructure, APIs, operating systems, databases and cloud. A trading terminal or a branch application is an application. Read 2026-09-08.

PCI DSS v4.0.1

Requirement 6.2.3, where the client is bespoke software

Bespoke and custom software is reviewed prior to release into production to identify and correct potential coding vulnerabilities. A desktop client written for you is bespoke software. Requirement text read 2026-09-13.

Remediation

The state a finding closes in

Each finding carries through open, fixed, retested and closed, and closes on a retest against the build that claims to fix it — which is why the finding records the build it was found on.

Delivery

Choosing a model for a filing

Where the report goes to a regulator or an assessor, start with the expert-verified model.

Worked example

A chain that starts inside the installer

Four steps, and the first three are things a desktop application does by its nature. The fourth is the defect.

A chain from a desktop engagement, read step by step and then in sequence
LinkAloneIn sequence
1 A package anybody can open An installer, unpacked.It carries the configuration the application ships with.
2 An operation the interface never offers A string in a configuration file.It is a server operation the user interface draws for nobody.
3 A message the official client would not send A well-formed request.It calls that operation, from an account that should not reach it.
4 A server that agreed A success response.The check that should have stopped it only ever existed in the client.
A chain from a desktop engagement, read step by step and then in sequence Reconstructed from the class as it is worked; sector, technology and every identifier are generalised. The final step is the only one of the four that is a finding.

Measured

Benchmarked against our own assessors

The benchmark put B-52 and Security Brigade’s expert assessment team on the same targets at the same time and pooled what both produced into one set, each item counted once. B-52 reached 90–95% of that pooled set, and part of what it reached the team had not — which is why the pool is larger than either side’s own output, and why the expert-verified model is offered as a real choice rather than as a compromise.

Send the installer your users get, from $500

One scan is one application or target, and the entry tier is $500. Send the package as you distribute it — a build with the protections taken out answers a question nobody is asking.