Skip to content

Commit 34df098

Browse files
ananosurunc-bot[bot]
authored andcommitted
ci(security): Make tools' versions environment vars
To further cleanup the GH actions workflows, we use env vars instead of the input. We should follow-up on this to sanitize the actual inputs. PR: #307 Signed-off-by: Anastassios Nanos <ananos@nubificus.co.uk> Reviewed-by: Charalampos Mainas <cmainas@nubificus.co.uk> Approved-by: Charalampos Mainas <cmainas@nubificus.co.uk>
1 parent b9c2b63 commit 34df098

1 file changed

Lines changed: 74 additions & 22 deletions

File tree

.github/workflows/vm_test.yml

Lines changed: 74 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ on:
4343
required: false
4444

4545
workflow_dispatch:
46-
46+
4747
permissions:
4848
contents: read
4949

@@ -60,8 +60,38 @@ jobs:
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

Comments
 (0)