Skip to content

docs: refine cybersecurity and networking guidance - #458

Open
Bad3r wants to merge 4 commits into
mainfrom
docs/cybersecurity-networking-guidance
Open

docs: refine cybersecurity and networking guidance#458
Bad3r wants to merge 4 commits into
mainfrom
docs/cybersecurity-networking-guidance

Conversation

@Bad3r

@Bad3r Bad3r commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add and refine the cybersecurity glossary's Masquerading and RTLO guidance, including contents navigation, representation-aware detection coverage, and versioned ATT&CK tactic context.
  • Clarify the networking reference's MAC-address ownership, permanent-address inspection, persistent profile configuration, temporary macchanger use, active-profile reset, and Ethernet link-down prerequisites.
  • Keep the cybersecurity and networking documentation changes together in this PR.

Test plan

  • nix --option eval-cache false develop path:. -c pre-commit run --files docs/csec/glossary.md docs/networking/README.md --hook-stage manual
  • nix --option eval-cache false develop path:. -c mdformat --check docs/csec/glossary.md docs/networking/README.md
  • nix --option eval-cache false develop path:. -c lychee --offline --no-progress docs/csec/glossary.md docs/networking/README.md
  • git diff --check -- docs/csec/glossary.md docs/networking/README.md

The glossary and networking reference both needed operational clarification before publication. The glossary now distinguishes actual RTLO characters from encoded telemetry representations, while the networking guide clarifies address ownership, permanent-address inspection, and transient versus profile-based MAC changes.

Validation: nix develop path:. -c pre-commit run --files docs/csec/glossary.md docs/networking/README.md --hook-stage manual; nix develop path:. -c lychee --offline --no-progress docs/csec/glossary.md docs/networking/README.md; git diff --cached --check
@github-project-automation github-project-automation Bot moved this to Backlog in ❄️ NixOS Aug 12, 2026
@Bad3r Bad3r added area(docs) Repository documentation is a significant affected surface. area(networking) Networking services, DNS, VPN, SSH transport, or connectivity. focus(security) Concrete security risk, secret exposure, auth boundary, or vulnerability. type(docs) Documentation-only work or missing documentation. labels Aug 12, 2026 — with ChatGPT Codex Connector
@Bad3r
Bad3r marked this pull request as ready for review August 12, 2026 08:55
@claude

claude Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Claude finished @Bad3r's task in 5m 8s —— View job


Review complete

  • Read PR diff and metadata
  • Verify cross-references and anchors in docs/networking/README.md
  • Verify glossary claims and structure
  • Post findings

Three inline findings posted, most severe first:

  1. [ENHANCEMENT] docs/networking/README.md:122-125 — the worked example under Set a fixed address on a connection profile sets the address and then clears it in the same block, so copy-pasting the section's only recipe leaves the profile back on the host-wide default.
  2. [ENHANCEMENT] docs/csec/glossary.md:45-49 — the escaped and percent-encoded RTLO representations are listed in one hex case only; searches derived from the list silently miss the lowercase forms that json.dumps and urllib.parse.quote emit.
  3. [ENHANCEMENT] docs/networking/README.md:316-317 — "carrier and no address" reads as a lost MAC on a page where "address" means MAC throughout; it means no IP lease.

Verified and not flagged: all four intra-document anchors resolve (#set-a-fixed-address-on-a-connection-profile, #change-the-address-temporarily-with-macchanger, #re-key-services-after-moving-a-host-to-stable, #pin-an-interface-name); the ethtool provenance claim matches modules/networking/networking.nix:15 under flake.homeManagerModules.base; the RTLO example resolves to the stated rendering; wrap = "keep" in modules/meta/treefmt.nix:139 means the suggestions above will not disturb mdformat.

Note on comment 3828926588: its escape sequences were decoded into literal U+202E characters in transit, so its suggestion block must not be committed. 3828931171 on the same lines is the corrected replacement. I could not delete or edit the original — gh api write access is not in my allowed tools here.
· Branch docs/cybersecurity-networking-guidance

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking issues found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 441d5edd80

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/csec/glossary.md Outdated
Comment thread docs/csec/glossary.md Outdated
Comment thread docs/networking/README.md Outdated
Comment thread docs/networking/README.md
`nmcli connection modify` updates the saved profile, while an active
NetworkManager connection keeps the old address until it is reactivated or
reapplied. The reset example now brings the named profile up after clearing the
cloned address and explains why link-down applies to Ethernet as well as Wi-Fi.
@Bad3r

Bad3r commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Feedback addressed

Implemented in ed256243:

  • Reapplied the named NetworkManager connection after clearing 802-3-ethernet.cloned-mac-address, so the documented reset updates both the saved profile and the active device.
  • Clarified that the NetworkManager release and link-down prerequisites apply to Ethernet as well as Wi-Fi because a running interface rejects the MAC change with EBUSY.

Rejected with technical justification:

  • The two Masquerading taxonomy findings are stale against the linked source. The live MITRE ATT&CK T1036 page currently assigns T1036 to Stealth. Defense Evasion is the historical classification in ATT&CK v18, so changing the glossary would make it disagree with its live reference.

Decisions:

  • No user decision was required. The repository, current PR, and authoritative references determined each outcome.

Consequential follow-on updates:

  • The PR body now describes the active-profile reset and Ethernet prerequisite and no longer claims that the two documentation areas are contained in one commit.
  • The corrected command sequence names the profile for both activations, preventing saved-profile and runtime-address drift.

Reliability:

  • The networking example now makes the state transition explicit: modify the profile, activate the requested address, clear the profile value, and activate it again to restore the host policy. The prerequisite prose covers the kernel failure mode before the command sequence.

Validation passed:

  • nix --option eval-cache false develop path:. -c pre-commit run --files docs/csec/glossary.md docs/networking/README.md --hook-stage manual
  • nix --option eval-cache false develop path:. -c mdformat --check docs/csec/glossary.md docs/networking/README.md
  • nix --option eval-cache false develop path:. -c lychee --offline --no-progress docs/csec/glossary.md docs/networking/README.md
  • git diff --check -- docs/csec/glossary.md docs/networking/README.md

Comment thread docs/networking/README.md Outdated
Comment thread docs/networking/README.md Outdated
Comment thread docs/csec/glossary.md Outdated
Bad3r added 2 commits August 21, 2026 11:59
`802-3-ethernet.cloned-mac-address` is persistent per-profile state, while
`macchanger` is a temporary link operation. The docs now give the profile
setting its own ownership entry and heading, and explain why Ethernet remains
`IFF_UP` for carrier detection until the link is brought down.
ATT&CK v19 split the old Defense Evasion taxonomy, and current T1036 uses
Stealth. The glossary now records the v19 and v18 classifications with both
references so versioned readers can reconcile them.
@Bad3r

Bad3r commented Aug 21, 2026

Copy link
Copy Markdown
Owner Author

Automated review follow-up

The second automated review round identified three enhancements, all implemented:

  • 56fbdac8 gives Ethernet's IFF_UP carrier-detection reason for bringing the link down, separates persistent 802-3-ethernet.cloned-mac-address configuration into its own section, and links that section from the ownership overview.
  • 2fc79045 qualifies the ATT&CK taxonomy transition by version: v19 and later use Stealth, while v18 and earlier used Defense Evasion, with both live and versioned references retained.
  • The PR body now reflects the versioned ATT&CK context and the separated persistent profile guidance.

No additional user decision was needed. The same focused documentation validation passed again, including pre-commit, mdformat, offline lychee, and git diff --check.

Comment thread docs/networking/README.md
Comment on lines +122 to +125
nmcli connection modify "<profile name>" 802-3-ethernet.cloned-mac-address 02:00:00:00:00:01
nmcli connection up "<profile name>"
nmcli connection modify "<profile name>" 802-3-ethernet.cloned-mac-address "" # clear the profile value
nmcli connection up "<profile name>" # apply the reset to the device

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ENHANCEMENT] This block is the only worked example under a heading that promises how to hold an address, but it ends by clearing the property and reactivating. A reader who copies the block — the normal way a four-line nmcli recipe gets used — ends with the profile back on the host-wide "stable" default and no fixed address, which is the opposite of what the section set out to do. The revert steps belong to the undo path, not the setup path; separate them so the setup sequence stands alone.

Suggested change
nmcli connection modify "<profile name>" 802-3-ethernet.cloned-mac-address 02:00:00:00:00:01
nmcli connection up "<profile name>"
nmcli connection modify "<profile name>" 802-3-ethernet.cloned-mac-address "" # clear the profile value
nmcli connection up "<profile name>" # apply the reset to the device
nmcli connection modify "<profile name>" 802-3-ethernet.cloned-mac-address 02:00:00:00:00:01
nmcli connection up "<profile name>"
# Undo path, run only when reverting: `modify` rewrites the saved profile, so
# the device keeps the address until this second activation.
nmcli connection modify "<profile name>" 802-3-ethernet.cloned-mac-address ""
nmcli connection up "<profile name>"

Comment thread docs/csec/glossary.md
Comment on lines +45 to +49
The RTLO sub-technique can be detected by inspecting filenames for the actual
`U+202E` character and, in logs or serialized telemetry, separately accounting
for escaped (`\u202E`), labeled (`[U+202E]`), and percent-encoded (`%E2%80%AE`)
representations. These representations are not interchangeable stored values;
search each according to the field's encoding.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ENHANCEMENT] The three representations are given in a single fixed case, but the hex digits in both encodings are case-insensitive and lowercase is the common emission: Python's json.dumps writes ``, and urllib.parse.quote writes `%e2%80%ae`. An analyst who builds a literal search from this list — which is exactly what "search each according to the field's encoding" instructs — matches neither, and the miss is silent. State the case rule so the derived searches cover both.

Suggested change
The RTLO sub-technique can be detected by inspecting filenames for the actual
`U+202E` character and, in logs or serialized telemetry, separately accounting
for escaped (`\u202E`), labeled (`[U+202E]`), and percent-encoded (`%E2%80%AE`)
representations. These representations are not interchangeable stored values;
search each according to the field's encoding.
The RTLO sub-technique can be detected by inspecting filenames for the actual
`U+202E` character and, in logs or serialized telemetry, separately accounting
for escaped (``), labeled (`[U+202E]`), and percent-encoded (`%E2%80%AE`)
representations. The hex digits in the escaped and percent-encoded forms are
case-insensitive, and lowercase is what most serializers emit, so match
`` and `%e2%80%ae` as well. These representations are not interchangeable
stored values; search each according to the field's encoding.

Comment thread docs/csec/glossary.md
Comment on lines +45 to +49
The RTLO sub-technique can be detected by inspecting filenames for the actual
`U+202E` character and, in logs or serialized telemetry, separately accounting
for escaped (`\u202E`), labeled (`[U+202E]`), and percent-encoded (`%E2%80%AE`)
representations. These representations are not interchangeable stored values;
search each according to the field's encoding.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ENHANCEMENT] Supersedes my sibling comment on these lines — that one had its escape sequences decoded into real U+202E characters in transit, so do not commit its suggestion. Corrected version below.

The three representations are listed in one fixed case, but the hex digits in both encodings are case-insensitive and lowercase is the common emission: Python's json.dumps writes `` and urllib.parse.quote writes `%e2%80%ae`. An analyst who builds a literal search from this list — exactly what "search each according to the field's encoding" instructs — matches neither, and the miss is silent.

Suggested change
The RTLO sub-technique can be detected by inspecting filenames for the actual
`U+202E` character and, in logs or serialized telemetry, separately accounting
for escaped (`\u202E`), labeled (`[U+202E]`), and percent-encoded (`%E2%80%AE`)
representations. These representations are not interchangeable stored values;
search each according to the field's encoding.
The RTLO sub-technique can be detected by inspecting filenames for the actual
`U+202E` character and, in logs or serialized telemetry, separately accounting
for escaped (``), labeled (`[U+202E]`), and percent-encoded (`%E2%80%AE`)
representations. The hex digits in the escaped and percent-encoded forms are
case-insensitive, and lowercase is what most serializers emit, so search for
`` and `%e2%80%ae` as well. These representations are not interchangeable
stored values; search each according to the field's encoding.

Comment thread docs/networking/README.md
Comment on lines +316 to +317
Both ends of the sequence matter. An unmanaged device runs no DHCP client, so
stopping after `macchanger` leaves a link that has carrier and no address,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[ENHANCEMENT] "address" means MAC address everywhere else on this page, and this sentence lands two lines after macchanger has just written one. "carrier and no address" reads as "the MAC assignment did not stick," which is the failure a reader running this procedure is already primed to look for; the intended meaning is that no DHCP lease exists. Name the layer.

Suggested change
Both ends of the sequence matter. An unmanaged device runs no DHCP client, so
stopping after `macchanger` leaves a link that has carrier and no address,
Both ends of the sequence matter. An unmanaged device runs no DHCP client, so
stopping after `macchanger` leaves a link that has carrier and no IP address,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area(docs) Repository documentation is a significant affected surface. area(networking) Networking services, DNS, VPN, SSH transport, or connectivity. focus(security) Concrete security risk, secret exposure, auth boundary, or vulnerability. type(docs) Documentation-only work or missing documentation.

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant