Repository navigation
Preserve Kubernetes escalation content and historical heading URLs - #485
Merged
Merged
Conversation
…vilege escalation
Collaborator
Author
|
Decision: keep The material contribution is a clearer location for existing techniques, not a claim of a new technique. Kubernetes RBAC and admission documentation support the distinction between an available operation and a demonstrated privilege gain. The review repaired misplaced navigation entries, indirect links, cross-page citations, duplicate reference URLs, and two broken image paths. Static chec… Head: |
Collaborator
Author
|
merge |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Repair of closed PR #481: historical heading URLs
PR #481 was closed because the candidate lost preexisting heading URLs. I compared the rendered mdBook HTML IDs for every modified existing Kubernetes/OpenShift page at merge base
47bb6e8f32with this branch. The prior head lacked 42 IDs in nine original pages. This branch restores all 42 at their original URLs: 40 moved sections now have a compatibility heading and exact destination link; two old title aliases are restored next to the original page titles. The rendered comparison now reports zero missing old IDs. This directly repairs the reviewer finding; the moved executable content remains on the destination pages.The affected original pages are Kubernetes namespace and cloud pivoting, API object operations, External Secrets Operator, Kyverno overview and bypass, OPA Gatekeeper overview and bypass, and OpenShift SCC.
Concrete repairs in this branch
This PR changes 39 Kubernetes/OpenShift Markdown files. It moves the writeups and their command blocks to pages that describe their actual effect. Old headings stay as pointers where an existing link might target them. The table names the content moved, its destination, and the identity or permission boundary used to decide placement.
kubernetes-privilege-escalation/api-object-operations.mdkubernetes-basic-information/api-object-operations.md; the old page is an inbound pointer. These are API syntax examples, not a gain by themselves.kubernetes-privilege-escalation/rbac-and-identities.mdwildcard access explanationsAccess Any Resource or VerbandAccess Any Resource with a specific verbtokubernetes-basic-information/access-and-common-concepts.md; retainedbind,escalate, impersonation and the concrete aggregated-ClusterRole path in privilege escalation.kubernetes-privilege-escalation/validating-admission-policies.mddefinition, purpose, enumeration and native CEL overviewkubernetes-basic-information/admission-policy-objects.md; retained headings on the old page as links. Concrete admission-policy weakening and MutatingAdmissionPolicy code injection remain in privilege escalation.kubernetes-privilege-escalation/kyverno/and.../opa-gatekeeper/kubernetes-basic-information/kyverno.mdandopa-gatekeeper.md. The oldREADME.mdfiles point there.kubernetes-post-exploitation/kyverno-bypass.mdandopa-gatekeeper-bypass.md. Old pages retain pointers; writable policy/constraint paths remain documented in privilege escalation.validating-admission-policies.mdtested mutation controls, authorizer match conditions, parameter-object cases and fail-open backend testskubernetes-post-exploitation/admission-control-bypass.md. The privilege-escalation page retains the specific headings and pointers, so a reader can distinguish a possible admission bypass from an already-proven identity gain.kubernetes-privilege-escalation/external-secrets-operator.mdkubernetes-post-exploitation/external-secrets-operator.md; the old page links to it. An ExternalSecret value alone does not identify a credential subject.controllers-and-admission.md,storage-and-networking.md, andsecrets-and-configmaps.mdgeneric controller/data/network effectskubernetes-post-exploitation/controller-data-and-network-effects.md. Original headings point to their exact destination. Controller paths that run code as a named workload identity stay in privilege escalation.kubernetes-privilege-escalation/secrets-and-configmaps.mdgeneric Secret enumeration and legacy token-name guessingkubernetes-post-exploitation/secrets-and-configmaps.md#secret-listing-and-data-inspectionand#legacy-token-secret-name-guessing. The original page keeps the verified legacy ServiceAccount-token path and manually created token-Secret path.kubectl auth whoamiproof inkubernetes-privilege-escalation/secrets-and-configmaps.md#argo-cd-managed-cluster-credentials; the post-exploitation Argo heading points back. It claims an identity gain only after a usable credential and exact managed-cluster subject are verified, not from the Secret label.#escalating-in-gke. It now requires the caller to control the bound Google subject and show newly effective Kubernetes RBAC permissions. The post-exploitation heading points back. The operation is Kubernetes RoleBinding create/bind, not a GCPcontainer.*grant.kubernetes-post-exploitation/kubernetes-pivoting-to-clouds.mdworkload-to-cloud identity pathskubernetes-privilege-escalation/kubernetes-pivoting-to-clouds.md. Kept cloud-to-cluster verification, generic GKE setup, node-pool configuration, EKS guardrails and discovery commands on the post-exploitation page.kubernetes-post-exploitation/kubernetes-namespace-escalation.mdidentity-bearing cross-namespace and cloud trust sectionskubernetes-privilege-escalation/kubernetes-namespace-escalation.md; moved the generic binding review command tokubernetes-enumeration/rbac-objects.md. The former page keeps namespace-isolation discussion and pointers.kubernetes-post-exploitation/node-post-exploitation.mdexact control-plane credential artifactskubernetes-privilege-escalation/node-permissions-and-status.md#control-plane-node-artifacts. Generic node effects remain in post exploitation.kubernetes-post-exploitation/attacking-kubernetes-from-inside-a-pod.mdruntime socket/kernel helper access andkubernetes-privilege-escalation/workload-and-pod-access.mdSUID plantingkubernetes-persistence/identities-and-rbac.mdaggregated ClusterRole self-grantkubernetes-privilege-escalation/rbac-and-identities.md#bindings-and-aggregated-clusterroles, with a pointer from persistence.openshift-pentesting/openshift-scc.mdopenshift-privilege-escalation/openshift-scc.md#use-scc; the overview links to it.|
kubernetes-privilege-escalation/storage-and-networking.mdhost log symlink file reads | Moved the full file-read walkthrough and its code blocks tokubernetes-post-exploitation/node-post-exploitation.md#host-log-symlink-file-reads. The old heading points there; hostPath permission paths remain in privilege escalation. A host file read alone has no exact credential subject. ||
kubernetes-privilege-escalation/node-permissions-and-status.mdlegacy status/controller effects | Moved the full reproduced effects table tokubernetes-post-exploitation/controller-data-and-network-effects.md#legacy-status-metadata-and-controller-deputies. The old heading points there. Pending-Pod scheduling and namespace PSA permission paths remain in privilege escalation. ||
openshift-privilege-escalation/openshift-scc-bypass.mdcustom labels and namespace label listing | Moved label/automation context and the enumeration command toopenshift-basic-information.md#custom-labels-and-automationand#list-namespaces-with-the-run-level-label; old headings point to them. Neither the generic custom-label case nor listing establishes a new principal. ||
kubernetes-privilege-escalation/rbac-and-identities.mdnon-escalating RBAC explanations | Moved the/debug/*and/metricsread commands tokubernetes-enumeration/rbac-objects.md#diagnostic-non-resource-urls; moved built-in escalation-prevention rules and binding writes withoutbindtokubernetes-basic-information/access-and-common-concepts.md. The old headings are exact pointers; the actualbindandescalatetechniques remain on the privilege-escalation page. ||
kubernetes-privilege-escalation/workload-and-pod-access.mdStealthandport-forward| Moved the Pod security-mode comparison tokubernetes-basic-information/access-and-common-concepts.md#pod-security-mode-effects, and the fullkubectl port-forwardexample tokubernetes-post-exploitation/attacking-kubernetes-from-inside-a-pod.md#podsportforward-network-access. Old headings are pointers. Neither section alone supplies a new identity or permission. |src/SUMMARY.mdregisters the new basic-information, post-exploitation and privilege-escalation pages. Enumeration links, the privilege-escalation hub and the Kubernetes persistence page now point to the destination sections. Moved sections retain their original source citations or direct source links.Checks at head
53a9c98481mdbook buildpassed again after restoring the 42 heading IDs. The base version was also built to compare actual rendered IDs page by page. All preexisting rendered IDs on modified existing pages are present at this head.mdbook buildpassed. I made the unavailabletabspreprocessor optional only during the local build and restoredbook.tomlafterward.tabspreprocessor marked optional through an environment override. All 72 active and 221 excluded companion Blue-CloudPEASS source references resolve against the fresh rendered HTML, including all four newly activated exact-evidence variants (Argo CD remote credential, static Google key, GKE RBAC self-grant, Kiam/Kube2IAM role). One exclusion cites a page without an anchor; that page exists.git diff --checkpassed. Nobook.tomlchange is committed.