Actualizaciones de seguridad y de versiones estables¶
Corregir un error de seguridad en Ubuntu¶
Introducción¶
Corregir errores de seguridad no es en tan distinto de corregir un error normal en Ubuntu, y se asume que está familiarizado con el parcheo de errores normales. Para mostrar dónde se hacen las cosas de forma diferente, actualizaremos el paquete dbus en Ubuntu 10.04 LTS (Lucid Lynx) para incluir una actualización de seguridad.
Obtener el código fuente¶
En este ejemplo, ya sabemos que deseamos corregir el paquete dbus en Ubuntu10.04 LTS (Lucid Lynx). Así que lo primero es determinar la versión del paquete que quiere descargar. Puede usar rmadison para que le ayude:
$ rmadison dbus | grep lucid
dbus | 1.2.16-2ubuntu4 | lucid | source, amd64, i386
dbus | 1.2.16-2ubuntu4.1 | lucid-security | source, amd64, i386
dbus | 1.2.16-2ubuntu4.2 | lucid-updates | source, amd64, i386
Habitualmente deseará seleccionar la versión más alta para la emisión que pretende parchear que no esté en -proposed o -backports. Ya que estamos actualizando el dbus de Lucid, descargará 1.2.16-2ubuntu4.2 from lucid-updates:
$ bzr branch ubuntu:lucid-updates/dbus
Parchear el código fuente¶
Ahora que ya tenemos el paquete fuente, necesitamos parchearlo para corregir la vulnerabilidad. Puede usar cualquier método que sea adecuado para el paquete, incluyendo técnicas UDD, pero para este ejemplo se usará edit-patch (del paquete ubuntu-dev-tools). edit-patch es la forma más sencilla de parchear paquetes y básicamente se trata de un envoltorio alrededor de todos los demás sistemas de parches que pueda imaginar.
Para crear un parche usando edit-patch:
$ cd dbus
$ edit-patch 99-fix-a-vulnerability
Esto aplicará los parches existentes y dejará el empaquetado en un directorio temporal. Ahora edite los archivos necesarios para solucionar la vulnerabilidad. Frecuentemente se habrá proporcionado un parche desde aguas arriba de forma que pueda aplicarlo:
$ patch -p1 < /home/user/dbus-vulnerability.diff
Después de hacer los cambios necesarios, simplemente pulse Ctrl+D o escriba «exit» para dejar el intérprete de órdenes temporal.
Formatear el registro de cambios («changelog») y los parches¶
Después de aplicar los parches deseará actualizar el registro de cambios («changelog»). La orden dch se usa para editar el archivo debian/changelog y edit-patch lanzará dch automáticamente después de des-aplicar todos los parches. Si no está usando edit-patch, puede lanzar dch -i manualmente. A diferencia de los parches normales, debería usar el siguiente formato (note que el nombre de la distribución usa lucid-security, ya que se trata de una actualización de seguridad para Lucid) para actualizaciones de seguridad:
dbus (1.2.16-2ubuntu4.3) lucid-security; urgency=low
* SECURITY UPDATE: [DESCRIBE VULNERABILITY HERE]
- debian/patches/99-fix-a-vulnerability.patch: [DESCRIBE CHANGES HERE]
- [CVE IDENTIFIER]
- [LINK TO UPSTREAM BUG OR SECURITY NOTICE]
- LP: #[BUG NUMBER]
...
Actualice su parche para usar las etiquetas de parche adecuadas. Su parche debería tener por lo menos las etiquetas «Origin», «Description» y «Bug-Ubuntu». Por ejemplo, edite debian/patches/99-fix-a-vulnerability.patch para que tenga es siguiente aspecto:
## Description: [DESCRIBE VULNERABILITY HERE]
## Origin/Author: [COMMIT ID, URL OR EMAIL ADDRESS OF AUTHOR]
## Bug: [UPSTREAM BUG URL]
## Bug-Ubuntu: https://launchpad.net/bugs/[BUG NUMBER]
Index: dbus-1.2.16/dbus/dbus-marshal-validate.c
...
Muchas vulnerabilidades se puede solucionar en la misma carga de seguridad, pero asegúrese de usar parches distintos para las diferentes vulnerabilidades.
Probar y enviar el trabajo¶
En este punto el proceso es el mismo que para arreglar un bug normal de Ubuntu. Más concretamente, deseará:
- Construir el paquete y comprobar que compila sin errores y sin ningún aviso del compilador añadido.
- Actualizar a la nueva versión del paquete desde la versión anterior
- Probar que el nuevo paquete corrige la vulnerabilidad y no introduce ninguna regresión
- Enviar el trabajo mediante una propuesta de integración de Launchpad y rellenar un error en Launchpad asegurándose de marcar el error como un fallo de seguridad y de suscribirse a ubuntu-security-sponsors.
Si la vulnerabilidad de seguridad no es pública todavía no presente una propuesta de integración y asegúrese de marcar el error como privado.
El presentado debe incluir un caso de prueba, es decir, un comentario que indique claramente cómo recrear el error ejecutando la versión antigua y luego cómo asegurarse de que el error no existe en la nueva versión.
El informe de error debería también confirmar que la incidencia está solucionada en versiones más recientes de Ubuntu que la que incluye la corrección propuesta (en el ejemplo anterior, más modernas que Lucid). Si la incidencia no está solucionada en versiones más modernas de Ubuntu debería preparar las actualizaciones también para esas versiones.
Actualizaciones de versiones estables¶
También se permite actualizaciones de emisiones en las que un paquete tiene un error de gran impacto, como por ejemplo una regresión severa de una emisión anterior o un error que podría causar pérdida de datos. Debido al potencia de que esas actualizaciones a su vez introduzcan errores solo se permiten cuando los cambios pueden ser fácilmente comprendidos y verificados.
El proceso de actualizaciones de versiones estables es el mismo que el proceso para errores de seguridad excepto que debería suscribir ubuntu-sru al error.
La actualización irá al repositorio proposed (por ejemplo, lucid-proposed) donde se deberá comprobar que soluciona el problema y no introduce nuevos errores. Después de una semana sin problemas reportados se puede mover a updates.
Véase la Stable Release Updates wiki page`_ para más información.