Skip to Content
OpenVAPTAlpha
Pre-release. Academic, non-commercial, source-available code built by AI Cybersecurity Engineers. Free for your own use, 100% at your own risk. This website collects no data. Read MoreRead Less
Pre-release. OpenVAPT has no Stable release yet. Every build is an Alpha, Beta or Release Candidate: it may be incomplete or wrong, so use it only on test machines, 100% at your own risk. See Release Channels
Academic, non-commercial, source-available code built by AI Cybersecurity Engineers. These are AI systems, not people or registered engineers. Free for your own personal or business use, on your own machines, 100% at your own risk. Not for sale. Not for providing services. This website collects no data. Read the Acknowledgements
Pre-release. OpenVAPT has no Stable release yet. Every build is an Alpha, Beta or Release Candidate: it may be incomplete or wrong, so use it only on test machines, 100% at your own risk. See Release Channels
Academic, non-commercial, source-available code built by AI Cybersecurity Engineers. These are AI systems, not people or registered engineers. Free for your own personal or business use, on your own machines, 100% at your own risk. Not for sale. Not for providing services. This website collects no data. Read the Acknowledgements
A4AppliedAbout 30 minutes

Building Your Own Check

The engineering view: how a detection is designed, kept read-only, tested against false results and documented.

Read First: A1

You Will Be Able To

  • Describe the parts of an OpenVAPT check.
  • Write a read-only detection through the System interface.
  • Prove a check with vulnerable and hardened test cases.

Anatomy

A check is one Go file that registers metadata (id, severity, CVSS vector, rationale, detection, fix, verify, references, standards) and a Run function. Registration refuses checks without documentation or citations.

Read-Only by Construction

Run receives a sys.System with only read operations, an allow-list of read-only commands, and loopback-only HTTP. There is nothing to call that could change the machine or reach another one.

Proving It

Add lab fixtures in internal/lab so the simulated vulnerable server triggers your check and the hardened server passes it. The engine tests fail until both behave. That is how false positives and false negatives are caught before release.

In Summary

A check is a small Go file with full documentation and tests. It must fail on the vulnerable lab and pass on the hardened lab.

Apply It

These OpenVAPT checks put this module into practice. Open one to see its detection logic and source code.

CheckTitleSeverity
HOST-LOG-001System Logging Not PersistentLow

Printable Worksheet · Teacher Answer Key · For Teachers · Print this page with your browser's Print command for a handout.

Also available as plain Markdown for notes, scripts and AI tools. Same facts, same source, no styling.

Lab

  1. Read internal/checks/host/logging_time.go and internal/check/check.go.
  2. Follow the steps on the Learn page to add a small check, then run go test ./...

Check Yourself

Answers are checked in your browser and never stored or sent.

Question 1

1. How does OpenVAPT show a check does not raise false positives?

Question 2

2. Why can a check not modify the system?

Question 3

3. What happens when a check is registered without documentation or citations?

Question 4

4. What network access does a check get?

Question 5

5. How are false negatives caught before release?

References

Cite This Page

If this page helped your work, please cite it. The version and web address are filled in; the access date is today's date in your browser. Every other style, and when credit is required, is on How to Cite OpenVAPT.

APA 7
OpenVAPT. (2026). A4: Building Your Own Check (Version 0.1.0-alpha.6). OpenVAPT Academy. Retrieved October 16, 2026, from https://openvapt.com/academy/a4.html

In text: (OpenVAPT, 2026). Accessed: the date shown is today's date from your own browser (the site's build date without JavaScript); change it to the day you read the page.

BibTeX
@misc{openvapt_a4,
  author       = {{OpenVAPT}},
  title        = {{A4: Building Your Own Check}},
  year         = {2026},
  howpublished = {\url{https://openvapt.com/academy/a4.html}},
  note         = {OpenVAPT Academy, version 0.1.0-alpha.6. Accessed 16 October 2026}
}

Accessed: the date shown is today's date from your own browser (the site's build date without JavaScript); change it to the day you read the page.

Citing OpenVAPT does not mean OpenVAPT endorses, approves or has reviewed your work.