Skip to content

Commit cf2a4ef

Browse files
committed
code: drop internal-doc references and stale ops/range mode names from comments
Public-repo hygiene: remove references to internal docs (PAI, current-activity-list, memory slugs, finding ids) from code and test comments, and sweep the stale "ops mode" and "range mode" wording to offense and defense. Fix the deploy.sh usage header to point at the root deploy.tfvars. Comments and docstrings only, no behavior change.
1 parent 69a3d2b commit cf2a4ef

20 files changed

Lines changed: 50 additions & 60 deletions

File tree

‎frontend/src/vulns.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export const VULN_LABEL = Object.fromEntries(
147147
// tests/test_vuln_providers_sync.py) filters a host's declared vulns by this
148148
// same map before planting them, so a template can declare an id everywhere and
149149
// have it silently no-op on a provider it cannot land on; the canvas greys the
150-
// checkbox the same way. See current-activity-list (provider-aware toggles).
150+
// checkbox the same way.
151151
export const VULN_PROVIDERS = Object.fromEntries(
152152
VULN_CATALOG.flatMap((g) => g.items)
153153
.filter((i) => i.providers)

‎src/redstackpro/ansible.py‎

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
# local Administrator into the domain Administrator with the same password, so
6060
# the connection survives the promotion. The password is never written into the
6161
# export: it is supplied at run time from the terraform output, read from the
62-
# environment. See goad-native-recreation.
62+
# environment.
6363
RANGE_WINDOWS_CONNECTION = {
6464
"ansible_connection": "psrp",
6565
"ansible_port": 5986,
@@ -93,8 +93,7 @@ class GenerationError(Exception):
9393
# before planting them, so a template can declare an id on every host and have
9494
# it silently no-op on a provider it cannot land on -- the same id the canvas
9595
# greys out there. Kept in sync with the `providers` field in
96-
# frontend/src/vulns.js by tests/test_vuln_providers_sync.py. See
97-
# current-activity-list (provider-aware toggles) and goad-fidelity-build.
96+
# frontend/src/vulns.js by tests/test_vuln_providers_sync.py.
9897
VULN_PROVIDERS = {
9998
# The relay payoff (mitm6/WPAD, or coercion into a CVE-2019-1040-vulnerable
10099
# relay) needs a real L2 broadcast/multicast domain. Proxmox/ESXi put the
@@ -366,7 +365,7 @@ def _host_vars(self):
366365
# hosts-file play can give each host a friendly alias -- the id
367366
# the user set (and can rename) on the canvas, not a hardcoded
368367
# mythic/sliver. AD hosts also get an FQDN below. See the
369-
# redstackpro.hosts role and range-access-model.
368+
# redstackpro.hosts role.
370369
"redstackpro_host_shortname": nid,
371370
# The host's PRIVATE address, for the /etc/hosts block -- NOT
372371
# ansible_host, which is the public address for a jumpbox or
@@ -388,7 +387,7 @@ def _host_vars(self):
388387
# list and pins the listen port so Ansible and Terraform agree on it.
389388
# Per-operator peers and client credentials are generated at apply from
390389
# redstackpro_jumpbox_operators, which the overlay already emitted. See
391-
# vpn-multiuser-spec and plan.vpn_access.
390+
# plan.vpn_access.
392391
if node["kind"] == "jumpbox":
393392
self._jumpbox_vpn_vars(node, vars_)
394393

@@ -397,7 +396,7 @@ def _host_vars(self):
397396
# member (the dc role seeds the domain side). Note the local account
398397
# no longer opens an SSH session -- sshd here is key-only as of
399398
# 2026-09-10 -- but the account is still what makes the breach real on
400-
# this host. See range-access-model and P2.5.
399+
# this host.
401400
if self._is_range() and node["kind"] == "jumpbox":
402401
breach = [u["username"] for u in self._assumed_breach_users()]
403402
if breach:
@@ -422,9 +421,9 @@ def _host_vars(self):
422421
# And it carries the offensive toolchain by default, because in a
423422
# range this host IS the assumed-breach foothold the solution is
424423
# run from: leaving it bare would mean every operator hand-installs
425-
# the same tools before step one. An ops-mode bastion gets nothing,
424+
# the same tools before step one. An offense bastion gets nothing,
426425
# since there the tooling belongs on the operator box. The overlay
427-
# wins if it says either way. Opens no ports. See PZ-2.
426+
# wins if it says either way. Opens no ports.
428427
vars_.setdefault("redstackpro_jumpbox_offensive_toolkit", True)
429428

430429
# A redirector carries two things for its cover site, and the split
@@ -498,8 +497,7 @@ def _host_vars(self):
498497
# anyway would look like a management path that works. See 0019.
499498
# A range's Windows host is provisioned over psrp as the local
500499
# Administrator; an ops range's Windows box self-provisions and
501-
# is only ever reached by the winrm_ca bootstrap. See
502-
# goad-native-recreation.
500+
# is only ever reached by the winrm_ca bootstrap.
503501
vars_.update(RANGE_WINDOWS_CONNECTION if self._is_range()
504502
else WINDOWS_CONNECTION)
505503
# A Windows operator is internal and reached at its private
@@ -528,7 +526,7 @@ def _host_vars(self):
528526
# it by fully-qualified name as well as by its canvas alias
529527
# (redstackpro_host_shortname, set for every host above). The
530528
# address is a placeholder resolved at apply, carried in
531-
# ansible_host; here we only need the name. See range-access-model.
529+
# ansible_host; here we only need the name.
532530
fqdn = self._host_fqdn(node)
533531
if fqdn:
534532
vars_["redstackpro_host_fqdn"] = fqdn
@@ -581,7 +579,7 @@ def _assumed_breach_users(self):
581579
"""Every domain user flagged assumed_breach: the range's patient-zero
582580
foothold identities. Each is a low-priv domain user (seeded by the dc
583581
role) the jumpbox also creates as a local admin so an operator can SSH in
584-
as it. See range-access-model and P2.5."""
582+
as it."""
585583
out = []
586584
for node in self.ctx.nodes.values():
587585
if node.get("kind") != "domain":
@@ -956,7 +954,6 @@ def _group_vars(self):
956954
"{{ lookup('env', 'REDSTACKPRO_LAB_PASSWORD') }}"
957955
if self._is_range():
958956
# The account the range's Windows hosts are provisioned as.
959-
# See goad-native-recreation.
960957
all_["redstackpro_range_admin_user"] = "Administrator"
961958
# Per-user passwords, for a lab that seeds real per-account
962959
# credentials (GOAD's documented passwords). A task that logs on as,
@@ -986,7 +983,7 @@ def _group_vars(self):
986983
# differ by platform branch on this rather than sharing one path, so
987984
# a fix proven on one provider cannot regress another. Defaults to
988985
# "generic" when the compile did not name a provider. See
989-
# goad-native-recreation and the dc role's promotion branch.
986+
# the dc role's promotion branch.
990987
all_["redstackpro_platform"] = self.provider or "generic"
991988
# The SIEM addresses a Windows host's agents report to. A host reports
992989
# to every SIEM box the range has, so this maps each SIEM box's
@@ -1281,8 +1278,7 @@ def _render_site(plan):
12811278
# (the account, the password, and RDP are set at first boot), so a group
12821279
# that holds one excludes it from the play. A range inverts this: its
12831280
# Windows hosts are the domain controllers and members the play exists to
1284-
# provision, so they stay in and are driven over psrp. See 0019, 0022 and
1285-
# goad-native-recreation.
1281+
# provision, so they stay in and are driven over psrp. See 0019, 0022.
12861282
host_pattern = group
12871283
if group_windows and not range_mode:
12881284
host_pattern = "%s:!windows" % group
@@ -1377,7 +1373,7 @@ def _render_site(plan):
13771373
# self-provisions at boot), so it is NOT an ansible recipient -- its hosts
13781374
# block rides the boot script instead (operator_setup.ps1 / RSP_HOSTS). That
13791375
# is why the Windows play is range-only: only a range's Windows hosts are
1380-
# reachable over psrp. See range-access-model and the /etc/hosts PAI item.
1376+
# reachable over psrp.
13811377
ad_groups = [g for g in ("domain_controllers", "servers", "workstations")
13821378
if g in plan.groups]
13831379
ad_hosts = set().union(*(set(plan.groups[g]) for g in ad_groups)) \

‎src/redstackpro/assets/ansible/roles/redstackpro.collector/tasks/dashboards.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# first login rather than after an afternoon of building panels.
88
#
99
# It binds on the private address only. The collector has no public address --
10-
# EXP002 forbids one -- and in ops mode every network in the plan is internally
10+
# EXP002 forbids one -- and in offense mode every network in the plan is internally
1111
# open (d6a00cc), so the jumpbox reaches it without a rule of its own and the
1212
# internet cannot reach it at all. The operator arrives through the portal's 443,
1313
# which is the one public door the range already had.

‎src/redstackpro/assets/ansible/roles/redstackpro.collector/templates/opensearch-dashboards.yml.j2‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# {{ ansible_managed }}
22
#
33
# Bound to every interface, which is safe here and only here: the collector holds
4-
# no public address (EXP002 forbids one) and in ops mode the plan's networks are
4+
# no public address (EXP002 forbids one) and in offense mode the plan's networks are
55
# internally open, so the reachable set is the operator's own stack. The operator
66
# arrives through the portal on the jumpbox, which proxies this under /dashboards.
77
server.host: "0.0.0.0"

‎src/redstackpro/assets/ansible/roles/redstackpro.host_vulns/tasks/endpoint_telemetry.yml‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
# detections need. A default range ships none of this (quieter, GOAD parity), so
44
# a Wazuh/ELK agent sees only the native Security log and is blind to
55
# process/command-line and object-change activity. Opting in here installs Sysmon
6-
# and turns on command-line (4688) and directory-service (5136) auditing. See the
7-
# goad-wazuh detection page and PAI F-wazuh-telemetry.
6+
# and turns on command-line (4688) and directory-service (5136) auditing.
87

98
- name: Enable command-line auditing (4688 with the process command line)
109
ansible.windows.win_powershell:

‎src/redstackpro/assets/ansible/roles/redstackpro.jumpbox/tasks/toolkit.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# assumed-breach foothold and patient zero ([[range-access-model]]), so the operator
44
# works FROM here: this is the box the GOAD solution runs from. Arming it is what
55
# makes the solution zero-touch. Opt out with `offensive_toolkit: false` on the
6-
# jumpbox overlay; ops-mode bastions never get it, since there the tooling belongs
6+
# jumpbox overlay; offense bastions never get it, since there the tooling belongs
77
# on the kali/operator box rather than the perimeter host.
88
#
99
# Nothing here opens a port, so this does not widen the jumpbox's internet surface

‎src/redstackpro/assets/ansible/roles/redstackpro.jumpbox/templates/guacamole-nginx.conf.j2‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ server {
1818

1919
{% if redstackpro_collector_address | default('') | length > 0 %}
2020
# The collector's dashboard, reached through the portal rather than a second
21-
# public door. The collector holds no public address and in ops mode the
21+
# public door. The collector holds no public address and in offense mode the
2222
# plan's networks are internally open, so this hop is jumpbox to collector on
2323
# a private address and the internet never sees 5601. Dashboards is
2424
# configured with the matching server.basePath, without which every asset

‎src/redstackpro/assets/ansible/roles/redstackpro.operator/defaults/main.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ redstackpro_operator_git_tools:
9191
# is the operator's SSH client to every lab box, VS Code the editor. NOTE: the
9292
# offense win-op01 self-provisions at boot and has no WinRM, so this list only
9393
# reaches a Windows operator that IS managed (a range operator, or win-op once it
94-
# gets a WinRM listener); the boot-script port covers win-op01 itself. See PAI.
94+
# gets a WinRM listener); the boot-script port covers win-op01 itself.
9595
redstackpro_operator_windows_packages:
9696
- mobaxterm
9797
- vscode

‎src/redstackpro/assets/terraform/modules/aws/host/windows-setup.ps1.tftpl‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Start-Service -Name TermService
4040
# promoted this local account becomes the domain Administrator with the same
4141
# password, so the connection survives the promotion. The range is an isolated
4242
# subnet, so the listener is self signed and the control node does not validate
43-
# it. See redStackPRO goad-native-recreation.
43+
# it.
4444
Set-LocalUser -Name "Administrator" -Password $pass
4545
Enable-LocalUser -Name "Administrator"
4646

@@ -78,7 +78,7 @@ if (-not (Get-NetFirewallRule -Name "redstackpro-winrm-https" -ErrorAction Silen
7878
# brings the payload to ~5.3KB and the whole thing to ~10KB. GCP carries the
7979
# same script in a metadata key with a 256KB budget and needs no such trick, so
8080
# this compression is an AWS-local concern.
81-
# See operator_setup.ps1 and the /etc/hosts PAI item.
81+
# See operator_setup.ps1.
8282
$rspDone = "C:\Windows\Temp\operator-setup.done"
8383
if (-not (Test-Path $rspDone)) {
8484
try {

‎src/redstackpro/assets/terraform/modules/azure/host/main.tf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ resource "azurerm_virtual_machine_extension" "winrm" {
200200
# is either a range Windows box or the ops operator, never both), so the VM never
201201
# carries two CustomScript extensions. The script is base64 (it uses PowerShell
202202
# here-strings), RSP_HOSTS names the range, and RSP_OPERATOR is the account whose
203-
# profile the kit lands in. See operator_setup.ps1 and the /etc/hosts PAI item.
203+
# profile the kit lands in. See operator_setup.ps1.
204204
resource "azurerm_virtual_machine_extension" "operator_setup" {
205205
count = (var.windows && var.operator_setup) ? 1 : 0
206206
name = "redstackpro-operator-setup"

0 commit comments

Comments
 (0)