Compromised GCP SHell
Compromised. What does this mean?unknown
json
a day ago
18 kB
28
No Index
curl -H "Metadata-Flavor: Google" \ http://metadata.google.internal/computeMetadata/v1/?recursive=true {"instance":{"attributes":{"block-project-ssh-keys":"true","cos-update-strategy":"update_disabled","enable-guest-attributes":"TRUE","environments-devops-cloud-google-com_environment-receiver-port":"934","environments-devops-cloud-google-com_inverting-proxy-ca-cert":"-----BEGIN CERTIFICATE-----\nMIIBpDCCAUugAwIBAgIRAKGoZHDV/bd80/sbs1PRlPEwCgYIKoZIzj0EAwIwMjEw\nMC4GA1UEAxMnaW52ZXJ0aW5nLXByb3h5LmVudmlyb25tZW50cy1zeXN0ZW0uc3Zj\nMB4XDTIyMDgyNDE2MjgwNloXDTMyMDgyMTE2MjgwNlowMjEwMC4GA1UEAxMnaW52\nZXJ0aW5nLXByb3h5LmVudmlyb25tZW50cy1zeXN0ZW0uc3ZjMFkwEwYHKoZIzj0C\nAQYIKoZIzj0DAQcDQgAESb0r0nu/vFd5nfJ9pCJ8e+nr8cQJQ5JFFexswYHA7aja\n0BmnALRrmPtITGtMgIe4iNr/PcC/SguYnrao7MxBBaNCMEAwDgYDVR0PAQH/BAQD\nAgKkMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPtGDU+slsSRhUhzUsW8TReF\nAT8kMAoGCCqGSM49BAMCA0cAMEQCIClZehQggxJ2s/WZ2mzkOBbLgCMmJ9d3Tr5X\nyjZ4SxjsAiBIpxUBKqgCCSTufBBNtZusjZLixU6IML6/sLpltYfigQ==\n-----END CERTIFICATE-----\n","environments-devops-cloud-google-com_secret":"NCesFUxWkw3t2+zg+nfRThTRSRh0DS5d6Zt1o3BfxxA=","google-monitoring-enabled":"true","shutdown-script":"#!/bin/bash\n\nfunction killGateway () {\n echo 'Killing gateway process'\n\n gateway=$(ps aux | grep gateway | awk '{print $2}' | head -1)\n kill -9 \"$gateway\"\n\n echo 'Gateway process terminated'\n}\n\nkillGateway |& tee /dev/ttyS2\n","startup-script":"#!/bin/bash\n\nfunction await-crictl() {\n until /usr/bin/crictl ps &>/dev/null; do\n echo 'Waiting for crictl...'\n sleep 1\n done\n}\nfunction delete-default-docker-network() {\n until docker ps &>/dev/null; do\n sleep 2\n done\n systemctl stop docker.service\n ip link delete docker0\n}\nfunction enable-default-fluent-bit-logging() {\n echo 'Enabling default logging agent'\n mkdir -p /var/log/containers\n sed -i '1i # Adapted from: https://cos.googlesource.com/cos/overlays/board-overlays/+/refs/heads/master/project-lakitu/app-admin/fluent-bit/files/fluent-bit.conf' /etc/fluent-bit/fluent-bit.conf\n sed -i 's| flush 1| flush 10\\n Metric Off\\n Log_File /var/log/fluent-bit.log|' /etc/fluent-bit/fluent-bit.conf\n # clean up unnecessary default configuration for fluent-bit\n sed -i '/# Collects docker.service logs./,$d' /etc/fluent-bit/fluent-bit.conf\n cat >> /etc/fluent-bit/fluent-bit.conf << EOF\n\n[INPUT]\n Name tail\n Tag cos_containers\n Path /var/log/containers/*.log\n Parser_1 time1\n Parser_2 time2\n DB /var/log/google-fluentbit/containers.log.db\n Path_Key file_name\n Read_from_Head True\n Mem_Buf_Limit 5MB\n Skip_Long_Lines On\n\n# match fluent-bit jsonPayload structure\n[FILTER]\n Name parser\n Match cos_containers\n Parser time2\n Parser no_parser\n Key_Name log\n Reserve_Data On\n\n# Add container_id field in container logs.\n[FILTER]\n Name parser\n Match cos_containers\n Key_Name file_name\n Parser container_filename_to_id\n Reserve_Data On\n\n[FILTER]\n Name modify\n Match cos_containers\n Rename container_id cos.googleapis.com/container_id\n # 3) Rename field 'stream' to avoid collisions from container logs where\n # users may be also using 'stream' as a key\n Rename stream cos.googleapis.com/stream\n # 4) Rename field 'log' to a more generic field 'message'. This way Logs\n # Explorer UI will display the log message as summary of the log entry.\n Rename log message\n\n# match fluent-bit jsonPayload structure\n[FILTER]\n Name nest\n Match cos_containers\n Operation lift\n Nested_under message\n\n[OUTPUT]\n Name stackdriver\n Match *\n Resource gce_instance\n severity_key severity\n Workers 4\n Retry_limit 14\nEOF\n\n echo 'Updating parser.conf.'\n container_id_regex=\" Regex ^\\/var\\/log\\/containers\\/(?<container_id>[^\\/]+)\\.log$\"\n sed -i \"\\$c\\\\$container_id_regex\" /etc/fluent-bit/parsers.conf\n cat >> /etc/fluent-bit/parsers.conf << EOF\n\n[PARSER]\n Name time1\n Format json\n Time_Key time\n Time_Format %Y-%m-%dT%H:%M:%S.%NZ\n\n[PARSER]\n Name time2\n Format regex\n Regex ^(?<time>.+) (?<stream>stdout|stderr) [^ ]* (?<log>.*)$\n Time_Key time\n Time_Format %Y-%m-%dT%H:%M:%S.%N%:z\n Decode_Field_As json log\n\n[PARSER]\n Name no_parser\n Format regex\n Regex ^(?<message>.*)$\nEOF\n echo 'Restarting fluent-bit'\n systemctl restart fluent-bit\n if [[ \"false\" == \"true\" ]]; then\n journalctl -u fluent-bit -f|tee /dev/ttyS3>/dev/null&\n fi\n}\n\nfunction set-inotify-watches-for-editor() {\n echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && \\\n sudo sysctl -p\n}\nfunction configure-containerd() {\n # TODO(b/295421330): Move these binaries to more appropriate path.\n # LINT.IfChange\n wget --no-verbose https://storage.googleapis.com/\"us-west1\"-cloud-workstations-binaries/binaries/gcfsd/v0.214.0/gcfsd -O /var/lib/google/gcfsd\n chmod +x /var/lib/google/gcfsd\n wget --no-verbose https://storage.googleapis.com/\"us-west1\"-cloud-workstations-binaries/binaries/gcfs-snapshotter/v1.31-0/containerd-gcfs-grpc -O /var/lib/google/containerd-gcfs-grpc\n chmod +x /var/lib/google/containerd-gcfs-grpc\n\n cat << EOF > /etc/systemd/system/gcfsd.service\n# Systemd configuration for Google Container File System service\n[Unit]\nDescription=Google Container File System service\nAfter=network.target\n\n[Service]\nType=simple\n\n# More aggressive Go garbage collection setting (go/fast/19).\nEnvironment=GOGC=10\nExecStartPre=-/bin/umount -v /run/gcfsd/mnt\nExecStartPre=-/bin/mkdir -p /run/gcfsd/mnt\n# prod config\nExecStartPre=/bin/mkdir -p /var/lib/containerd/io.containerd.snapshotter.v1.gcfs/snapshotter/layers\nExecStartPre=/bin/mkdir -p /var/lib/containerd/io.containerd.snapshotter.v1.gcfs/gcfsd\n# start\nExecStart=/var/lib/google/gcfsd \\\n --allow_suid=true \\\n --mount_point=/run/gcfsd/mnt \\\n --metrics_flavor=\"\" \\\n --client_name=cloud_shell \\\n --log_level=info \\\n --max_content_cache_size_mb=721 \\\n --max_large_files_cache_size_mb=721 \\\n --event_reporter_type=none \\\n --layer_cache_dir=/var/lib/containerd/io.containerd.snapshotter.v1.gcfs/snapshotter/layers \\\n --images_in_use_db_path=/var/lib/containerd/io.containerd.snapshotter.v1.gcfs/gcfsd/images_in_use.db\n\nExecStop=/bin/umount /run/gcfsd/mnt\nRuntimeDirectory=gcfsd\nStateDirectory=gcfsd\n# Higher process scheduling priority\nNice=-20\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n MTU=$(cat /sys/class/net/eth0/mtu)\n if [[ \"${MTU}\" -gt 1460 ]]; then\n MTU=1460\n fi\n mkdir -p /etc/cni/net.d\n cat << EOF > /etc/cni/net.d/10-containerd-net.conflist\n{\n \"cniVersion\": \"1.0.0\",\n \"name\": \"containerd-net\",\n \"plugins\": [\n {\n \"type\": \"bridge\",\n \"bridge\": \"cni0\",\n \"isGateway\": true,\n \"ipMasq\": true,\n \"promiscMode\": true,\n \"ipam\": {\n \"type\": \"host-local\",\n \"ranges\": [\n [{\n \"subnet\": \"10.88.0.0/16\"\n }]\n ],\n \"routes\": [\n { \"dst\": \"0.0.0.0/0\" }\n ]\n }\n },\n {\n \"type\": \"firewall\",\n \"backend\": \"iptables\",\n \"iptablesAdminChainName\": \"CLOUD-SHELL-FORWARD\"\n },\n {\n \"type\": \"portmap\",\n \"capabilities\": {\"portMappings\": true}\n },\n {\n \"type\": \"tuning\",\n \"mtu\": ${MTU},\n \"sysctl\": {\n \"net.ipv6.conf.all.disable_ipv6\": \"1\",\n \"net.ipv6.conf.default.disable_ipv6\": \"1\",\n \"net.ipv6.conf.lo.disable_ipv6\": \"1\"\n }\n }\n ]\n}\nEOF\n\n mkdir -p /etc/containerd-gcfs-grpc\n touch /etc/containerd-gcfs-grpc/config.toml\n cat << EOF > /etc/systemd/system/snapshotter.service\n# Systemd configuration for Google Container File System snapshotter\n[Unit]\nDescription=GCFS snapshotter\nAfter=network.target\nBefore=containerd.service\n\n[Service]\nEnvironment=HOME=/root\nExecStart=/var/lib/google/containerd-gcfs-grpc \\\n --log-level=info \\\n --kubeconfig \"\" \\\n --skip-duplicate-layers \\\n --enable-metric-exporter=false \\\n --enable-kubernetes-event-reporting=false \\\n --config=/etc/containerd-gcfs-grpc/config.toml\n\nRestart=always\nRestartSec=1\n\n[Install]\nWantedBy=multi-user.target\nEOF\n\n mkdir -p /etc/containerd\n cat << EOF > /etc/containerd/config.toml\nversion = 2\n[plugins.\"io.containerd.grpc.v1.cri\"]\n sandbox_image = \"gke.gcr.io/pause:3.7\"\n enable_unprivileged_ports = true\n[plugins.\"io.containerd.grpc.v1.cri\".containerd]\n snapshotter = \"gcfs\"\n disable_snapshot_annotations = false\n discard_unpacked_layers = true\n[plugins.\"io.containerd.grpc.v1.cri\".cni]\n bin_dir = \"/opt/cni/bin\"\n conf_dir = \"/etc/cni/net.d/\"\n conf_template = \"\"\n[plugins.\"io.containerd.grpc.v1.cri\".registry.mirrors.\"docker.io\"]\n endpoint = [\"https://mirror.gcr.io\",\"https://registry-1.docker.io\"]\n[proxy_plugins]\n [proxy_plugins.gcfs]\n type = \"snapshot\"\n address = \"/run/containerd-gcfs-grpc/containerd-gcfs-grpc.sock\"\nEOF\n\n cat << EOF > /etc/crictl.yaml\nruntime-endpoint: unix:///run/containerd/containerd.sock\nimage-endpoint: unix:///run/containerd/containerd.sock\ntimeout: 20\nEOF\n\n systemctl daemon-reload\n systemctl stop gcfsd snapshotter containerd\n systemctl enable gcfsd snapshotter containerd\n systemctl restart gcfsd snapshotter containerd\n if [[ \"false\" == \"true\" ]]; then\n journalctl -u containerd -f|tee /dev/ttyS3>/dev/null&\n fi\n # LINT.ThenChange(//depot/google3/production/sisyphus/cloud_sshrelay/cloud-shell-cos-preloader.sh)\n}\nfunction configure-orchestrator() {\n sudo mkdir -p /var/volumes\n sudo mkdir -p /var/lib/google\n touch /var/log/containers/orchestrator.log\n SECRET=$(curl -H Metadata-Flavor:Google -f http://169.254.169.254/computeMetadata/v1/instance/attributes/environments-devops-cloud-google-com_secret)\n RANDOM_ID=$(/usr/bin/openssl rand -hex 12)\n cat <<EOF > /var/lib/google/orchestrator-pod.json\n{\n \"metadata\": {\n \"name\": \"orchestrator\",\n \"namespace\": \"default\",\n \"uid\": \"${RANDOM_ID}\"\n },\n \"log_directory\": \"/var/log/containers\",\n \"linux\": {\n \"security_context\": {\n \"privileged\": true\n }\n },\n \"port_mappings\":[\n {\"container_port\": 934, \"host_port\": 934}\n ]\n}\nEOF\n cat <<EOF > /var/lib/google/orchestrator-container.json\n{\n \"metadata\": {\n \"name\": \"orchestrator\"\n },\n \"image\": {\n \"image\": \"gcr.io/cloudshell-images/orchestrator:latest\"\n },\n \"args\": [\"--baseServerUrl=https://ssh.cloud.google.com\",\"--enableLocalhostReplacement=true\",\"--frameAncestors=https://ide.cloud.google.com,https://shell.cloud.google.com,https://ssh.cloud.google.com,https://console.cloud.google.com\",\"--gatewayImage=gcr.io/cloudshell-images/gateway:latest\",\"--oauthClientId=618104708054-m0mqlm35l2ahieavnib6emtan2k95ps9.apps.googleusercontent.com\",\"--oauthRedirectPath=/devshell/gateway/oauth\",\"--userImage=gcr.io/cloudshell-images/cloudshell:latest\",\"--waitForDiskAttach=true\",\"--whitelistedHealthCheckOrigins=\\\"https://ide\\\\\\\\.cloud\\\\\\\\.google\\\\\\\\.com,https://shell\\\\\\\\.cloud\\\\\\\\.google\\\\\\\\.com,https://ssh\\\\\\\\.cloud\\\\\\\\.google\\\\\\\\.com\\\"\",\"--whitelistedOauthClients=XXX-9r9s1c4alg36erliucho9t52n32n6dgq.apps.googleusercontent.com,618104708054-plueempusfrhq9l2dk3do2jtapm533gi.apps.googleusercontent.com\"],\n \"envs\": [\n {\"key\": \"SECRET\", \"value\": \"${SECRET}\"}\n ],\n \"mounts\":[\n {\"host_path\": \"/dev\", \"container_path\": \"/dev\"},\n {\"host_path\": \"/run/containerd\", \"container_path\": \"/run/containerd\", \"propagation\": 2},\n {\"host_path\": \"/var\", \"container_path\": \"/var\", \"propagation\": 2},\n {\"host_path\": \"/tmp\", \"container_path\": \"/tmp\", \"propagation\": 2}\n ],\n \"log_path\":\"orchestrator.log\",\n \"linux\": {\n \"security_context\": {\n \"privileged\": true\n }\n },\n \"labels\": {\n \"containerd.io/restart.policy\": \"always\",\n \"containerd.io/restart.status\": \"running\"\n }\n}\nEOF\n #TODO(b/296237219): Create a script instead to run orchestrator.\n cat >> /etc/systemd/system/orchestrator.service << \"EOF\"\n [Unit]\n Description=orchestrator\n After=containerd.service\n Requires=containerd.service\n\n [Service]\n Restart=always\n ExecStart=/bin/sh -c '/usr/bin/crictl runp /var/lib/google/orchestrator-pod.json;PODID=$(/usr/bin/crictl pods --name \"orchestrator\" -q);/usr/bin/crictl create $PODID /var/lib/google/orchestrator-container.json /var/lib/google/orchestrator-pod.json;CONID=$(/usr/bin/crictl ps --name orchestrator -q -a);/usr/bin/crictl start $CONID'\nEOF\n systemctl daemon-reload\n systemctl start orchestrator.service\n if [[ \"false\" == \"true\" ]]; then\n journalctl -u orchestrator -f|tee /dev/ttyS3>/dev/null&\n tail -f /var/log/containers/orchestrator.log|tee /dev/ttyS3>/dev/null&\n fi\n}\n\nfunction main() {\n configure-containerd\n await-crictl\n enable-default-fluent-bit-logging\n delete-default-docker-network&\n # TODO(b/299290793): Pre-cache cloud shell container to improve startup\n # latency.\n set-inotify-watches-for-editor\n mount --make-rshared /var\n iptables -N CLOUD-SHELL-FORWARD\n configure-orchestrator\n\n # Allow incoming TCP connections on below ports on the host VM:\n # 934(Environment Receiver)\n # 980(Environment Gateway)\n # 6000(Cloud Shell SSH).\n iptables -w -A INPUT -p tcp -m multiport --dports 934,980,6000 -j ACCEPT\n # Allow incoming TCP connections on below ports in the pod. Note that these\n # are internal ports exposed by the containers:\n # 922(Environments Gateway SSH).\n # 934(Orchestrator)\n # 980(Environment Gateway HTTP)\n iptables -w -A CLOUD-SHELL-FORWARD -p tcp -m multiport --dports 922,934,980 -j ACCEPT\n\n # Create new chain\n iptables -N sandbox\n # Allow 1500 packets per second.\n iptables -A sandbox -p udp -m limit --limit 1500/s -j ACCEPT\n # Drop all others.\n iptables -A sandbox -p udp -j REJECT\n # Forward traffic coming from docker through the chain.\n iptables -I FORWARD -o eth0 -m state --state NEW -j sandbox\n\n echo 'VM is ready!'\n}\n\nmain |& tee /dev/ttyS2\n"},"cpuPlatform":"Intel Broadwell","description":"","disks":[{"deviceName":"boot","index":0,"interface":"SCSI","mode":"READ_WRITE","type":"PERSISTENT-BALANCED"},{"deviceName":"home","index":1,"interface":"SCSI","mode":"READ_WRITE","type":"PERSISTENT"}],"gceWorkloadCertificates":{},"guestAttributes":{},"hostname":"cloudshell-b8ea4071-d5bb-4ee0-8090-1e8783cd9c2a.us-west1-b.c.z82c3d2647bd2388e-tp.internal","id":9216212651603521248,"image":"projects/cloud-devshell-dev/global/images/cos-for-cloudshell-20250323-0000-rc00","licenses":[{"id":"6880041984096540132"},{"id":"166739712233658766"},{"id":"1001010"}],"machineType":"projects/587678703902/machineTypes/e2-standard-4","maintenanceEvent":"NONE","name":"cloudshell-b8ea4071-d5bb-4ee0-8090-1e8783cd9c2a","networkInterfaces":[{"accessConfigs":[{"externalIp":"34.53.34.13","type":"ONE_TO_ONE_NAT"}],"dnsServers":["169.254.169.254"],"forwardedIps":[],"gateway":"10.0.0.1","ip":"10.0.1.175","ipAliases":[],"mac":"42:01:0a:00:01:af","mtu":1460,"network":"projects/587678703902/networks/cs-us-west1-ijlt","subnetmask":"255.255.0.0","targetInstanceIps":[]}],"partnerAttributes":{},"preempted":"FALSE","remainingCpuTime":-1,"scheduling":{"automaticRestart":"TRUE","onHostMaintenance":"MIGRATE","preemptible":"FALSE"},"serviceAccounts":{"default":{"aliases":["default"],"email":"vms-cs-us-west1-ijlt@z82c3d2647bd2388e-tp.iam.gserviceaccount.com","scopes":["https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write"]},"vms-cs-us-west1-ijlt@z82c3d2647bd2388e-tp.iam.gserviceaccount.com":{"aliases":["default"],"email":"vms-cs-us-west1-ijlt@z82c3d2647bd2388e-tp.iam.gserviceaccount.com","scopes":["https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write"]}},"shutdownDetails":{"maxDuration":"","requestTimestamp":"","stopState":"UNSPECIFIED","targetState":"UNSPECIFIED"},"tags":["environments-instance"],"virtualClock":{"driftToken":"0"},"zone":"projects/587678703902/zones/us-west1-b"},"oslogin":{"authenticate":{"sessions":{}}},"project":{"attributes":{"VmDnsSetting":"ZonalOnly","gke-cs-us-west1-ijlt-70569f02-secondary-ranges":"services:cs-us-west1-ijlt:cs-us-west1-ijlt:gke-cs-us-west1-ijlt-services-70569f02,pods:cs-us-west1-ijlt:cs-us-west1-ijlt:gke-cs-us-west1-ijlt-pods-70569f02","sshKeys":"\ngke-70569f026ff6409cb64c:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCSyu5KgJ0fBDsd0xHe59eDfMtWhSR2cGdQ2yTOTT/Fx5riuHzyLN7OQBr1fXMD723Kpi3mxTVShIwtoa3mUrlYIz4ZTtVdziBj2otFTDIe/0HslXT59x1gW4oU7xrvVYWqaFYaVxeNJQnI9IKjoDz1/esI7eikdgoak/i2ElZplGQXr0qU7+FKerKcopTE3yLXG8SsWd12mDpdfM1U+XD4mjEKXXtGShBCi7TdWk1A2qvET7LiRbZPUDZQ933XJ22C+Y7A9n8EEXQJqF/AF2zlf5HyRufU5PpWqTx53B2o2REA+6E2eIay5f0ypA1f0UyPKVQ0/liuRcsjS+RSLeRb gke-70569f026ff6409cb64c@gke-70569f026ff6409cb64c\ngke-70569f026ff6409cb64c:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClqdH4toLDBr2ZZI6l8ShUBqrBuTA5S/9jolxCCPQ1tKRZEMqHYprrjBKP2sxgOUbL3EzwpAv7K7Ldj794bpkUBNDDrhbpAAtf6p4S0Mcuxyv5xytFHAKlhceiLYGmoiMkiViMI84WolRCc8rTnZLxKoRCtF6szzI5bPHxCWA8ROjGIh8zwZGnwlv1ltiRZ5ynxxTDxtqJ+z2C8wDBRenjv9RkiS/Xy+MWj2nvvfGOFmLikMXcjFOmtlZqxQ/dauNLs39q8gzfnxX1w/PUV2jXJ5MoP+XmwdhmMIw4TcYCJq7zgMbJ28//4ziPffNnAn0PV9smSejihCku+2SuL+lD gke-70569f026ff6409cb64c@gke-70569f026ff6409cb64c\ngke-70569f026ff6409cb64c:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqZXU0t+jygWa1e5IvPgLBv/XUO1M+PPwsqfqmZqF2uge0+IL6snd+hJUalkPjOknFydp8DRbvIepoH0Jak+ilHYTUCFheBSgU3nhq3hTfn6xu3deyc/mMzd/5lOhsUEIsUdfg5MS5K5XlnIDF79RyVmIIjtUdCHN87kUsY4N+0JhI0AEZwPt+kFoHIWhsi8T63vX6NFxmKtXx1Zu42JuaMlb7VNNjIOlIoUJwnK+lyouFkU0sehe94oEex5AwvfKz4kVdmq/+Q2jHpEwOeEXhaFXvi+EEFRVGzhiMvUcnh2nDkiwAp3kffSz+Tzt9+uPuyRyKq99DQ4/P5PpDP323 gke-70569f026ff6409cb64c@gke-70569f026ff6409cb64c"},"numericProjectId":587678703902,"projectId":"z82c3d2647bd2388e-tp"}}
Editor is loading...
Leave a Comment