# CVE-2019-13132 lab — CURVE INITIATE stack overflow → RCE. # # Build: docker build --platform linux/amd64 -t cve-2019-13132-lab . # Run : docker run --rm -it --platform linux/amd64 --privileged \ # -p 5556:5556 cve-2019-13132-lab # # --privileged — needed to flip /proc/sys/kernel/randomize_va_space FROM --platform=linux/amd64 debian:12 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake git ca-certificates pkg-config \ python3 python3-pip python3-venv \ binutils procps netcat-openbsd less vim gdb \ && rm -rf /var/lib/apt/lists/* RUN python3 -m venv /opt/venv && /opt/venv/bin/pip install pynacl ENV PATH="/opt/venv/bin:$PATH" ENV LAB_ROOT=/opt/zmq-curve-rce WORKDIR /opt COPY server-curve.c /opt/lab/ COPY exploit.py /opt/lab/ COPY calibrate.sh /opt/lab/ COPY compute_offsets.py /opt/lab/ COPY start_server.sh /opt/lab/ COPY run_lab_test.sh /opt/lab/ COPY entrypoint.sh /opt/lab/ RUN chmod +x /opt/lab/*.sh /opt/lab/*.py # Clone vulnerable libzmq 4.3.0 RUN git clone --depth 1 --branch v4.3.0 \ https://github.com/zeromq/libzmq.git $LAB_ROOT/src # Build libzmq: no canary, executable stack for shellcode RUN mkdir -p $LAB_ROOT/src/build && cd $LAB_ROOT/src/build && \ cmake .. \ -DCMAKE_C_FLAGS="-O0 -g -fno-stack-protector" \ -DCMAKE_CXX_FLAGS="-O0 -g -fno-stack-protector" \ -DCMAKE_SHARED_LINKER_FLAGS="-z execstack" \ -DBUILD_TESTS=OFF \ -DBUILD_STATIC=OFF \ -DENABLE_DRAFTS=OFF \ -DWITH_PERF_TOOL=OFF \ && make -j$(nproc) # Build vulnerable server: no canary, no PIE, executable stack RUN gcc -O0 -g -fno-stack-protector -fno-pie -no-pie -z execstack \ /opt/lab/server-curve.c \ -I $LAB_ROOT/src/include \ -L $LAB_ROOT/src/build/lib \ -lzmq -Wl,-rpath,$LAB_ROOT/src/build/lib \ -o $LAB_ROOT/server-curve # Pre-compute static offsets from the build artifacts RUN python3 /opt/lab/compute_offsets.py $LAB_ROOT/build_offsets.json RUN cp /opt/lab/exploit.py $LAB_ROOT/ && \ cp /opt/lab/calibrate.sh $LAB_ROOT/ && \ cp /opt/lab/start_server.sh $LAB_ROOT/ && \ cp /opt/lab/run_lab_test.sh $LAB_ROOT/ && \ cp /opt/lab/entrypoint.sh $LAB_ROOT/ EXPOSE 5556 ENTRYPOINT ["/opt/zmq-curve-rce/entrypoint.sh"]