コード例 #1
0
 def execute(self):
     config = get_config()
     if self.event.auth_token:
         logger.debug(
             "Trying to access the API server version endpoint using pod's"
             f" service account token on {self.event.host}:{self.event.port} \t"
         )
     else:
         logger.debug("Trying to access the API server version endpoint anonymously")
     version = self.session.get(f"{self.path}/version", timeout=config.network_timeout).json()["gitVersion"]
     logger.debug(f"Discovered version of api server {version}")
     self.publish_event(K8sVersionDisclosure(version=version, from_endpoint="/version"))
コード例 #2
0
 def execute(self):
     version_metadata = json.loads(
         requests.get("http://{host}:{port}/version".format(
             host=self.event.host,
             port=self.event.port,
         ),
                      verify=False).text)
     if "gitVersion" in version_metadata:
         self.publish_event(
             K8sVersionDisclosure(version=version_metadata["gitVersion"],
                                  from_endpoint="/version",
                                  extra_info="on the kube-proxy"))
コード例 #3
0
def test_K8sCveHunter():
    global cve_counter
    # because the hunter unregisters itself, we manually remove this option, so we can test it
    K8sClusterCveHunter.__new__ = lambda self, cls: object.__new__(self)

    e = K8sVersionDisclosure(version="1.10.1", from_endpoint="/version")
    h = K8sClusterCveHunter(e)
    h.execute()

    time.sleep(0.01)
    assert cve_counter == 2
    cve_counter = 0

    # test patched version
    e = K8sVersionDisclosure(version="v1.13.6-gke.13",
                             from_endpoint="/version")
    h = K8sClusterCveHunter(e)
    h.execute()

    time.sleep(0.01)
    assert cve_counter == 0
    cve_counter = 0
コード例 #4
0
 def execute(self):
     if self.event.auth_token:
         logging.debug(
             'Passive Hunter is attempting to access the API server version end point using the pod\'s service account token on {}:{} \t'
             .format(self.event.host, self.event.port))
     else:
         logging.debug(
             'Passive Hunter is attempting to access the API server version end point anonymously'
         )
     version = json.loads(self.session.get(self.path +
                                           "/version").text)["gitVersion"]
     logging.debug("Discovered version of api server {}".format(version))
     self.publish_event(
         K8sVersionDisclosure(version=version, from_endpoint="/version"))
コード例 #5
0
ファイル: proxy.py プロジェクト: wenhuizhang/kube-hunter
 def execute(self):
     config = get_config()
     version_metadata = requests.get(
         f"http://{self.event.host}:{self.event.port}/version",
         verify=False,
         timeout=config.network_timeout,
     ).json()
     if "gitVersion" in version_metadata:
         self.publish_event(
             K8sVersionDisclosure(
                 version=version_metadata["gitVersion"],
                 from_endpoint="/version",
                 extra_info="on kube-proxy",
             ))
コード例 #6
0
 def execute(self):
     self.pods_endpoint_data = self.get_pods_endpoint()
     k8s_version = self.get_k8s_version()
     privileged_containers = self.find_privileged_containers()
     healthz = self.check_healthz_endpoint()
     if k8s_version:
         self.publish_event(
             K8sVersionDisclosure(version=k8s_version, from_endpoint="/metrics", extra_info="on Kubelet")
         )
     if privileged_containers:
         self.publish_event(PrivilegedContainers(containers=privileged_containers))
     if healthz:
         self.publish_event(ExposedHealthzHandler(status=healthz))
     if self.pods_endpoint_data:
         self.publish_event(ExposedPodsHandler(pods=self.pods_endpoint_data["items"]))