← 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.
What to do first
- Rate-limit login and password reset. One setting that closes the only high-severity finding.
- Fix the session cookie attributes and stop disclosing software versions in responses. Half a day of work.
- 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
- Limit login to 5 attempts per minute per account and per address, at the web server or at the network edge.
- Add an adaptive challenge after 3–5 failed attempts.
- Use an increasing response delay rather than a hard lockout: a lockout lets anyone block someone else’s account on purpose.
- 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.
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
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