← Back to cybersecurity services
Sample · public version
Report on completed work

Information security audit of a web resource

This document shows the structure and wording of the report a client receives. The data is invented: the domain, findings and dates illustrate the format and do not belong to a real client.

This is a shortened version, and it is shortened on purpose. What you see here is a surface-level slice: common findings, explained just far enough to show how we present them. The working report delivered with an engagement contains the results of controlled live testing, specific attack vectors and verified exploitation scenarios, full requests and responses, affected code and configuration, and the list of methods and tools used. That is not published: a report on unfixed vulnerabilities works as a ready-made attack manual.

Delivery formats. The report is delivered as a PDF for management and the archive and as HTML for developers at the same time. On request we prepare a separate presentation for management: what we found, what it threatens and what to fix first.

Target
example-client.uz
Client
Example LLC
Performed by
NIXCLOUD LLC
Type of work
External web application audit, Grey Box
Period
01–08.11.2026
Document version
1.0, final
Basis
Contract and NDA
Classification
Confidential

Handling this document. The report describes unfixed vulnerabilities and, until they are closed, is of interest to an attacker. It is shared with a limited group on the client side, stored securely and not published. We keep our copy for the agreed period and then destroy it together with the working material.

Section 1

Executive summary

This section avoids technical terms. It is written for the reader who decides on budget and deadlines, not for the one who does the work.

Purpose

An independent assessment of how well the web resource and its infrastructure are protected against unauthorised access, leaks of user data, loss of availability and bypassing of business logic.

Overall assessment

The level of protection is assessed as satisfactory. No vulnerability allowing immediate control of the server or extraction of the database was found. At the same time there are weaknesses in authentication, security headers and session cookie attributes which are not critical on their own but together widen the attack surface noticeably.

Findings by severity
Severity Count What it means in practice
Critical 0 Direct takeover of the server or access to the database
High 1 Real risk of client accounts being compromised
Medium 3 Amplifies other vulnerabilities, does not lead to a breach alone
Low 4 Makes an attacker’s preparation easier
Note 2 Improvement advice, not a vulnerability

What to do first

  1. Rate-limit login and password reset. One setting that closes the only high-severity finding.
  2. Fix the session cookie attributes and stop disclosing software versions in responses. Half a day of work.
  3. Roll out a Content-Security-Policy. It needs testing, so it is a separate stage.
Section 2

Scope and methodology

What was tested

  • The client domains and subdomains on the agreed list
  • Public API endpoints
  • Registration, login, password reset and session handling
  • Upload and delivery of user files
  • Web server configuration and response headers

What was not tested

  • Third-party services: CDN and payment gateway. Only the correctness of the integration was checked
  • Volumetric denial-of-service attacks
  • Social engineering against the client’s staff
  • Physical security and the internal office network

The scope was fixed before the work started and did not change. Anything outside it was not tested, and the absence of findings there does not mean it is secure.

Rules of engagement

The work followed rules agreed in writing as an annex to the contract: the list of permitted domains and addresses, the testing window, a contact for an emergency stop, and a ban on modifying or deleting data. Anything that could disrupt the service was performed only after written approval.

Depth of testing

The scope of work is agreed in advance and comes at two levels. Testing without exploitation: a vulnerability is recorded from its indicators, without carrying the attack through, which is safe for a production environment. Controlled exploitation: a vulnerability is taken to a confirmed result, so that a theoretical risk can be told apart from a real one and it is clear what data an attacker would actually reach. The second level is performed only under separate written permission, in an agreed window, with the ability to stop immediately.

The public version of the report does not list the methods, tools and attack chains used. The working report states them in full: the client must know what was tested and how to reproduce the result.

Standards

  • OWASP Web Security Testing Guide 4.2
  • OWASP Top 10:2021
  • NIST SP 800-115
  • Severity scored with CVSS 3.1

Handling client data

No user data was extracted. Logs and configurations supplied for analysis were processed inside our closed environment. Where language models were used to work through large volumes, the model was deployed locally with no internet access: the contents of logs and configurations never reached external services. The conclusions and wording were checked by an engineer by hand.

Section 3

Detailed findings

Every finding follows the same shape: what exactly is wrong, what it threatens for the business, how it was confirmed and what has to be done. The identifier is used in correspondence and during the re-test.

NX-SEC-01 High

No rate limiting on login and password reset

CVSS 3.1
7.5AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Category
OWASP A07:2021 — identification and authentication failures
Components
POST /api/auth/login, POST /api/auth/password-reset
Status
Open

The problem

Neither endpoint limits the number of requests, by source address or by target account. Sending 1000 consecutive login attempts produced no delay, no lockout and no challenge.

How it was confirmed

1000 requests from one address in 94 seconds, all answered 401 with an average of 112 ms; no sign of any limit. No passwords were guessed: only the server’s reaction to request frequency was tested.

What it threatens

Client accounts can be brute-forced against leaked password lists at industrial scale. Password reset carries a separate risk: guessing the reset token takes over an account without knowing the password at all. With a few thousand users, some accounts will almost certainly be compromised, because people reuse passwords.

What to do

  1. Limit login to 5 attempts per minute per account and per address, at the web server or at the network edge.
  2. Add an adaptive challenge after 3–5 failed attempts.
  3. Use an increasing response delay rather than a hard lockout: a lockout lets anyone block someone else’s account on purpose.
  4. Rate-limit the issuing and checking of reset tokens separately from login.
NX-SEC-02 Medium

Security headers are not configured

CVSS 3.1
5.4AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
Category
OWASP A05:2021 — security misconfiguration
Components
All public pages
Status
Open

The problem

Server responses carry no Content-Security-Policy, no Permissions-Policy and no protection against the page being embedded in a frame.

What it threatens

On its own this does not lead to a breach — it is missing insurance. Without CSP, any future flaw that lets a foreign script run turns straight into session theft. Without framing protection, the interface can be overlaid and clicks intercepted.

What to do

Add the headers to the web server configuration. Start CSP in report-only mode and switch it on after testing, otherwise third-party scripts may break.

Content-Security-Policy: default-src 'self'; frame-ancestors 'none'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Strict-Transport-Security: max-age=31536000; includeSubDomains
Permissions-Policy: camera=(), microphone=(), geolocation=()
NX-SEC-03 Medium

Session cookie has no Secure or SameSite attribute

CVSS 3.1
4.3AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N
Category
OWASP A01:2021 — broken access control
Components
Session cookie
Status
Open

What it threatens

It raises the risk of a request forged from another site: a signed-in user follows a link and the action is performed in their name. Without Secure, the cookie may also travel over an unencrypted connection.

What to do

Set the full attribute set when issuing the session cookie.

Set-Cookie: session_id=...; Secure; HttpOnly; SameSite=Lax; Path=/
NX-SEC-04 Low

The server discloses software versions

CVSS 3.1
3.1AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Category
OWASP A05:2021 — security misconfiguration
Components
Server and X-Powered-By headers
Status
Open

What it threatens

An exact version in the header saves the attacker the reconnaissance: known vulnerabilities for that exact build can be tried straight away. It does not weaken protection directly, but it speeds up an attack and helps automated scanners.

What to do

Turn version disclosure off at the web server and in the application.

# nginx
server_tokens off;

# application — remove the X-Powered-By header

The sample holds four findings out of ten, and each is cut down. In the working report a finding carries reproduction steps, full requests and responses, screenshots, references to the affected code and configuration and — where exploitation was permitted — a confirmed scenario describing what was actually reached. That is everything a developer needs to fix the issue and check their own work. Publishing such text about someone else’s live system is not acceptable.

Section 4

Remediation plan

The order follows the ratio of risk removed to effort spent: the work that removes the most risk for the least effort comes first.

TimeframeFindingsWorkOwner
1–3 days NX-SEC-01 Rate limiting on login and password reset System administrator
1–2 weeks NX-SEC-03, NX-SEC-04 Session cookie attributes, stop disclosing software versions Development
within a month NX-SEC-02 Content-Security-Policy: report-only, review reports, switch on Development

On request the findings are exported to the client’s tracker as individual tasks, with descriptions, references to affected files and acceptance criteria.

Section 5

Re-test and limitations

Re-test

Once the fixes are in, we re-test the findings that were reported closed. The result is an annex to the report where every finding gets a status: fixed, partially fixed or still open. The period during which the re-test is included in the price is set in the contract.

Limitations

  • The assessment reflects the state of the system on the date of testing. Any change to code or configuration after that date can introduce new vulnerabilities.
  • The absence of a finding does not prove the absence of a vulnerability. An audit is bounded by its agreed scope, its time and the methods available.
  • Absolute security does not exist. The aim is to bring risk down to an acceptable level and make it manageable.
Appendices

Reference material

How to read the severity

Severity CVSS Interpretation
Critical 9.0–10.0 Fix immediately, stopping the service if necessary
High 7.0–8.9 Fix first, within days
Medium 4.0–6.9 Schedule into the next development cycle
Low 0.1–3.9 Fix alongside other work
Note — Not a vulnerability, improves the overall state

Logs and investigation

If the audit raises a suspicion that a breach has already happened, how far an investigation can go is decided entirely by what survived in the logs. The minimum worth keeping, and worth keeping off the server itself:

  • Web server access and error logs
  • Operating system and application authentication logs
  • Logs of permission changes and account creation or deletion
  • Deployment logs: who changed code and configuration, and when
  • The server’s network connections, at least in aggregate

If you suspect a breach, do not reinstall the system and do not delete files. That destroys the traces and makes it impossible to reconstruct what happened. The right first step is to take an image, or at least a copy of the logs, and only then restore service.

Terms

  • Grey Box — testing with partial knowledge of the system: an account and a general description, but no source code.
  • CVSS — an international scale for scoring vulnerability severity from 0 to 10, with an open methodology.
  • OWASP Top 10 — a list of the ten most common classes of web application vulnerability.
  • Rules of Engagement — rules agreed before the work: what may be tested, when and by which methods.
  • Attack surface — the set of points through which a system can be acted upon.

Want a report like this for your system?

Tell us what you have: a website, a server, an application. We will name the scope and the price before we start.

Send a request

Sample document. The domain, findings and dates are invented and shown to demonstrate the format.