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+ env :
68+ GO_VERSION : ${{ inputs.go_version }}
69+ RUNC_VERSION : ${{ inputs.runc_version }}
70+ CONTAINERD_VERSION : ${{ inputs.containerd_version }}
71+ CNI_VERSION : ${{ inputs.cni_version }}
72+ NERDCTL_VERSION : ${{ inputs.nerdctl_version }}
73+ CRICTL_VERSION : ${{ inputs.crictl_version }}
74+ FIRECRACKER_VERSION : ${{ inputs.firecracker_version }}
75+ SOLO5_VERSION : ${{ inputs.solo5_version }}
76+ run : |
77+ SAFE_GO_VERSION="$GO_VERSION"
78+ SAFE_RUNC_VERSION="$RUNC_VERSION"
79+ SAFE_CONTAINERD_VERSION="$CONTAINERD_VERSION"
80+ SAFE_CNI_VERSION="$CNI_VERSION"
81+ SAFE_NERDCTL_VERSION="$NERDCTL_VERSION"
82+ SAFE_CRICTL_VERSION="$CRICTL_VERSION"
83+ SAFE_FIRECRACKER_VERSION="$FIRECRACKER_VERSION"
84+ SAFE_SOLO5_VERSION="$SOLO5_VERSION"
85+
86+ for var in SAFE_GO_VERSION SAFE_RUNC_VERSION SAFE_CONTAINERD_VERSION SAFE_CNI_VERSION SAFE_NERDCTL_VERSION SAFE_CRICTL_VERSION SAFE_FIRECRACKER_VERSION SAFE_SOLO5_VERSION; do
87+ value="${!var}"
88+ if ! [[ "$value" =~ ^v?[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then
89+ echo "Invalid format for $var: $value"
90+ exit 1
91+ fi
92+ done
93+
94+
6595 - name : Harden the runner (Audit all outbound calls)
6696 uses : step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0
6797 with :
@@ -83,20 +113,29 @@ jobs:
83113 sudo mv virtiofsd /usr/libexec/virtiofsd
84114
85115 - name : Install runc
116+ env :
117+ RUNC_VERSION : ${{ inputs.runc_version }}
86118 run : |
87- wget -q https://github.com/opencontainers/runc/releases/download/v${{ inputs.runc_version }}/runc.$(dpkg --print-architecture)
119+ SAFE_RUNC="${RUNC_VERSION}"
120+ wget -q "https://github.com/opencontainers/runc/releases/download/v${SAFE_RUNC}/runc.$(dpkg --print-architecture)"
88121 sudo install -m 755 runc.$(dpkg --print-architecture) /usr/local/sbin/runc
89122 rm -f ./runc.$(dpkg --print-architecture)
90123
91124 - name : Install containerd
125+ env :
126+ CONTAINERD_VERSION : ${{ inputs.containerd_version }}
92127 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
128+ SAFE_CONTAINERD="${CONTAINERD_VERSION}"
129+ wget -q "https://github.com/containerd/containerd/releases/download/v${SAFE_CONTAINERD}/containerd-${SAFE_CONTAINERD}-linux-$(dpkg --print-architecture).tar.gz"
130+ sudo tar Cxzvf /usr/local "containerd-${SAFE_CONTAINERD}-linux-$(dpkg --print-architecture).tar.gz"
131+ rm -f "containerd-${SAFE_CONTAINERD}-linux-$(dpkg --print-architecture).tar.gz"
96132
97133 - name : Set up containerd service
134+ env :
135+ CONTAINERD_VERSION : ${{ inputs.containerd_version }}
98136 run : |
99- wget -q https://raw.githubusercontent.com/containerd/containerd/v${{ inputs.containerd_version }}/containerd.service
137+ SAFE_CONTAINERD="$CONTAINERD_VERSION"
138+ wget -q "https://raw.githubusercontent.com/containerd/containerd/v${SAFE_CONTAINERD}/containerd.service"
100139 sudo rm -f /lib/systemd/system/containerd.service
101140 sudo mv containerd.service /lib/systemd/system/containerd.service
102141 sudo systemctl daemon-reload
@@ -133,42 +172,55 @@ jobs:
133172 sudo systemctl restart containerd
134173
135174 - name : Install CNI plugins
175+ env :
176+ CNI_VERSION : ${{ inputs.cni_version }}
136177 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
178+ SAFE_CNI="${CNI_VERSION}"
179+ wget -q "https://github.com/containernetworking/plugins/releases/download/v${SAFE_CNI}/cni-plugins-linux-$(dpkg --print-architecture)-v${SAFE_CNI}.tgz"
138180 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
181+ sudo tar Cxzvf /opt/cni/bin " cni-plugins-linux-$(dpkg --print-architecture)-v${SAFE_CNI} .tgz"
182+ rm -f " cni-plugins-linux-$(dpkg --print-architecture)-v${SAFE_CNI} .tgz"
141183
142184 - name : Install nerdctl
185+ env :
186+ NERDCTL_VERSION : ${{ inputs.nerdctl_version }}
143187 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
188+ SAFE_NERDCTL="${NERDCTL_VERSION}"
189+ wget -q "https://github.com/containerd/nerdctl/releases/download/v${SAFE_NERDCTL}/nerdctl-${SAFE_NERDCTL}-linux-$(dpkg --print-architecture).tar.gz"
190+ sudo tar Cxzvf /usr/local/bin "nerdctl-${SAFE_NERDCTL}-linux-$(dpkg --print-architecture).tar.gz"
191+ rm -f "nerdctl-${SAFE_NERDCTL}-linux-$(dpkg --print-architecture).tar.gz"
147192
148193 - name : Install crictl
194+ env :
195+ CRICTL_VERSION : ${{ inputs.crictl_version }}
149196 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
197+ SAFE_CRI="${CRICTL_VERSION}"
198+ wget "https://github.com/kubernetes-sigs/cri-tools/releases/download/${SAFE_CRI}/crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz"
199+ sudo tar zxvf "crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz" -C /usr/local/bin
200+ rm -f "crictl-${SAFE_CRI}-linux-${{ matrix.arch }}.tar.gz"
153201 sudo tee -a /etc/crictl.yaml > /dev/null <<'EOT'
154202 runtime-endpoint: unix:///run/containerd/containerd.sock
155203 image-endpoint: unix:///run/containerd/containerd.sock
156204 timeout: 20
157205 EOT
158206
159-
160207 - name : Install Firecracker
208+ env :
209+ FC_VERSION : ${{ inputs.firecracker_version }}
161210 run : |
211+ SAFE_FC="${FC_VERSION}"
162212 ARCH="$(uname -m)"
163213 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}
214+ curl -L "${release_url}/download/${SAFE_FC}/firecracker-${SAFE_FC}-${ARCH}.tgz" | tar -xz
215+ sudo mv "release-${SAFE_FC}-${ARCH}/firecracker-${SAFE_FC}-${ARCH}" /usr/local/bin/firecracker
216+ rm -fr "release-${SAFE_FC}-${ARCH}"
168217
169218 - name : Install solo5
219+ env :
220+ SOLO5_VERSION : ${{ inputs.solo5_version }}
170221 run : |
171- git clone -b ${{ inputs.solo5_version }} https://github.com/Solo5/solo5.git
222+ SAFE_SOLO5="${SOLO5_VERSION}"
223+ git clone -b "${SAFE_SOLO5}" https://github.com/Solo5/solo5.git
172224 cd solo5
173225 ./configure.sh && make -j$(nproc)
174226 sudo cp tenders/hvt/solo5-hvt /usr/local/bin
0 commit comments