4343 required : false
4444
4545 workflow_dispatch :
46-
46+
4747permissions :
4848 contents : read
4949
6060 runner : ubuntu-22.04
6161 - arch : arm64
6262 runner : ubuntu-22.04-arm
63-
63+
6464 steps :
65+ - name : Validate inputs (prevent command injection)
66+ shell : bash
67+ run : |
68+ # Validate version-like inputs (X.Y.Z format)
69+ for var in go_version runc_version containerd_version cni_version nerdctl_version crictl_version firecracker_version solo5_version; do
70+ value="${{ inputs.$var }}"
71+ if ! [[ "$value" =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then
72+ echo "Invalid format for $var: $value"
73+ exit 1
74+ fi
75+ done
76+
77+ # Validate runner JSON arrays
78+ if ! echo '${{ inputs.runner-archs }}' | jq empty 2>/dev/null; then
79+ echo "Invalid JSON for runner-archs"
80+ exit 1
81+ fi
82+ if ! echo '${{ inputs.runner }}' | jq empty 2>/dev/null; then
83+ echo "Invalid JSON for runner"
84+ exit 1
85+ fi
86+ if ! echo '${{ inputs.runner-arch-map }}' | jq empty 2>/dev/null; then
87+ echo "Invalid JSON for runner-arch-map"
88+ exit 1
89+ fi
90+
6591 - name : Harden the runner (Audit all outbound calls)
6692 uses : step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0
6793 with :
@@ -83,20 +109,27 @@ jobs:
83109 sudo mv virtiofsd /usr/libexec/virtiofsd
84110
85111 - name : Install runc
112+ env :
113+ RUNC_VERSION : ${{ inputs.runc_version }}
86114 run : |
87- wget -q https://github.com/opencontainers/runc/releases/download/v${{ inputs.runc_version }}/runc.$(dpkg --print-architecture)
115+ SAFE_RUNC="${RUNC_VERSION}"
116+ wget -q "https://github.com/opencontainers/runc/releases/download/v${SAFE_RUNC}/runc.$(dpkg --print-architecture)"
88117 sudo install -m 755 runc.$(dpkg --print-architecture) /usr/local/sbin/runc
89118 rm -f ./runc.$(dpkg --print-architecture)
90119
91120 - name : Install containerd
121+ env :
122+ CONTAINERD_VERSION : ${{ inputs.containerd_version }}
92123 run : |
93- wget -q https://github.com/containerd/containerd/releases/download/v${{ inputs.containerd_version }}/containerd-${{ inputs.containerd_version }}-linux-$(dpkg --print-architecture).tar.gz
94- sudo tar Cxzvf /usr/local containerd-${{ inputs.containerd_version }}-linux-$(dpkg --print-architecture).tar.gz
95- rm -f containerd-${{ inputs.containerd_version }}-linux-$(dpkg --print-architecture).tar.gz
124+ SAFE_CONTAINERD="${CONTAINERD_VERSION}"
125+ wget -q "https://github.com/containerd/containerd/releases/download/v${SAFE_CONTAINERD}/containerd-${SAFE_CONTAINERD}-linux-$(dpkg --print-architecture).tar.gz"
126+ sudo tar Cxzvf /usr/local "containerd-${SAFE_CONTAINERD}-linux-$(dpkg --print-architecture).tar.gz"
127+ rm -f "containerd-${SAFE_CONTAINERD}-linux-$(dpkg --print-architecture).tar.gz"
96128
97129 - name : Set up containerd service
98130 run : |
99- wget -q https://raw.githubusercontent.com/containerd/containerd/v${{ inputs.containerd_version }}/containerd.service
131+ SAFE_CONTAINERD="${{ inputs.containerd_version }}"
132+ wget -q "https://raw.githubusercontent.com/containerd/containerd/v${SAFE_CONTAINERD}/containerd.service"
100133 sudo rm -f /lib/systemd/system/containerd.service
101134 sudo mv containerd.service /lib/systemd/system/containerd.service
102135 sudo systemctl daemon-reload
@@ -133,42 +166,55 @@ jobs:
133166 sudo systemctl restart containerd
134167
135168 - name : Install CNI plugins
169+ env :
170+ CNI_VERSION : ${{ inputs.cni_version }}
136171 run : |
137- wget -q https://github.com/containernetworking/plugins/releases/download/v${{ inputs.cni_version }}/cni-plugins-linux-$(dpkg --print-architecture)-v${{ inputs.cni_version }}.tgz
172+ SAFE_CNI="${CNI_VERSION}"
173+ wget -q "https://github.com/containernetworking/plugins/releases/download/v${SAFE_CNI}/cni-plugins-linux-$(dpkg --print-architecture)-v${SAFE_CNI}.tgz"
138174 sudo mkdir -p /opt/cni/bin
139- sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-$(dpkg --print-architecture)-v${{ inputs.cni_version }} .tgz
140- rm -f cni-plugins-linux-$(dpkg --print-architecture)-v${{ inputs.cni_version }} .tgz
175+ sudo tar Cxzvf /opt/cni/bin " cni-plugins-linux-$(dpkg --print-architecture)-v${SAFE_CNI} .tgz"
176+ rm -f " cni-plugins-linux-$(dpkg --print-architecture)-v${SAFE_CNI} .tgz"
141177
142178 - name : Install nerdctl
179+ env :
180+ NERDCTL_VERSION : ${{ inputs.nerdctl_version }}
143181 run : |
144- wget -q https://github.com/containerd/nerdctl/releases/download/v${{ inputs.nerdctl_version }}/nerdctl-${{ inputs.nerdctl_version }}-linux-$(dpkg --print-architecture).tar.gz
145- sudo tar Cxzvf /usr/local/bin nerdctl-${{ inputs.nerdctl_version }}-linux-$(dpkg --print-architecture).tar.gz
146- rm -f nerdctl-${{ inputs.nerdctl_version }}-linux-$(dpkg --print-architecture).tar.gz
182+ SAFE_NERDCTL="${NERDCTL_VERSION}"
183+ wget -q "https://github.com/containerd/nerdctl/releases/download/v${SAFE_NERDCTL}/nerdctl-${SAFE_NERDCTL}-linux-$(dpkg --print-architecture).tar.gz"
184+ sudo tar Cxzvf /usr/local/bin "nerdctl-${SAFE_NERDCTL}-linux-$(dpkg --print-architecture).tar.gz"
185+ rm -f "nerdctl-${SAFE_NERDCTL}-linux-$(dpkg --print-architecture).tar.gz"
147186
148187 - name : Install crictl
188+ env :
189+ CRICTL_VERSION : ${{ inputs.crictl_version }}
149190 run : |
150- wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${{ inputs.crictl_version }}/crictl-${{ inputs.crictl_version }}-linux-${{matrix.arch}}.tar.gz
151- sudo tar zxvf crictl-${{ inputs.crictl_version }}-linux-${{matrix.arch}}.tar.gz -C /usr/local/bin
152- rm -f crictl-${{ inputs.crictl_version }}-linux-${{matrix.arch}}.tar.gz
191+ SAFE_CRI="${CRICTL_VERSION}"
192+ wget "https://github.com/kubernetes-sigs/cri-tools/releases/download/${SAFE_CRI}/crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz"
193+ sudo tar zxvf "crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz" -C /usr/local/bin
194+ rm -f "crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz"
153195 sudo tee -a /etc/crictl.yaml > /dev/null <<'EOT'
154196 runtime-endpoint: unix:///run/containerd/containerd.sock
155197 image-endpoint: unix:///run/containerd/containerd.sock
156198 timeout: 20
157199 EOT
158200
159-
160201 - name : Install Firecracker
202+ env :
203+ FC_VERSION : ${{ inputs.firecracker_version }}
161204 run : |
205+ SAFE_FC="${FC_VERSION}"
162206 ARCH="$(uname -m)"
163207 release_url="https://github.com/firecracker-microvm/firecracker/releases"
164- curl -L ${release_url}/download/${{ inputs.firecracker_version }}/firecracker-${{ inputs.firecracker_version }}-${ARCH}.tgz | tar -xz
165- # Rename the binary to "firecracker"
166- sudo mv release-${{ inputs.firecracker_version }}-${ARCH}/firecracker-${{ inputs.firecracker_version }}-${ARCH} /usr/local/bin/firecracker
167- rm -fr release-${{ inputs.firecracker_version }}-${ARCH}
208+ curl -L "${release_url}/download/${SAFE_FC}/firecracker-${SAFE_FC}-${ARCH}.tgz" | tar -xz
209+ sudo mv "release-${SAFE_FC}-${ARCH}/firecracker-${SAFE_FC}-${ARCH}" /usr/local/bin/firecracker
210+ rm -fr "release-${SAFE_FC}-${ARCH}"
168211
169212 - name : Install solo5
213+ env :
214+ SOLO5_VERSION : ${{ inputs.solo5_version }}
170215 run : |
171- git clone -b ${{ inputs.solo5_version }} https://github.com/Solo5/solo5.git
216+ SAFE_SOLO5="${SOLO5_VERSION}"
217+ git clone -b "${SAFE_SOLO5}" https://github.com/Solo5/solo5.git
172218 cd solo5
173219 ./configure.sh && make -j$(nproc)
174220 sudo cp tenders/hvt/solo5-hvt /usr/local/bin
0 commit comments