# Laboratorio de errores de memoria de Código Vigía: compilador, sanitizers y herramientas de análisis.
# Debian 13 a propósito: con GCC 12 de Debian 12, AddressSanitizer falló al azar en 43 de 200 corridas
# en un kernel con vm.mmap_rnd_bits=32. Con GCC 14 no falló ninguna.
FROM debian:trixie-slim
RUN apt-get update \
 && apt-get install -y --no-install-recommends gcc libc6-dev make binutils gdb valgrind checksec \
 && rm -rf /var/lib/apt/lists/*
COPY verificar.sh /usr/local/bin/verificar
RUN sed -i 's/\r$//' /usr/local/bin/verificar && chmod +x /usr/local/bin/verificar
ENV ASAN_OPTIONS=detect_leaks=0

# Reto 5 (escalada): binario DELIBERADAMENTE vulnerable, compilado sin protecciones
# y con el bit setuid de root. Solo tiene sentido ejecutado por un usuario sin
# privilegios, en el servicio "escalada" del compose. El "root" es el de este
# contenedor desechable y sin red.
RUN useradd -m -s /bin/bash vigia
COPY escalada/escalada.c /opt/escalada/escalada.c
RUN gcc -g -O0 -fno-stack-protector -no-pie -fno-pie -D_FORTIFY_SOURCE=0 \
        /opt/escalada/escalada.c -o /opt/escalada/vulnerable \
 && chmod 644 /opt/escalada/escalada.c \
 && chown root:root /opt/escalada/vulnerable \
 && chmod 4755 /opt/escalada/vulnerable

WORKDIR /lab/programas
CMD ["bash"]
