ansforge / ansforge/dops-cryptolib
Bug de compatibilité de la Cryptolib CPS Linux avec les versions récentes de glibc (segment ELF PT_GNU_STACK)
- Dominant language
- No language data
- Stars
- 2
- Forks
- 3
- PR merge metrics
- No merged PRs in 30d
Description
Bonjour,
Je souhaite vous signaler un problème de compatibilité rencontré avec la Cryptolib CPS Linux distribuée par l'ANS.
Je me connecte au réseau de mon établissement de santé au moyen d'un VPN F5 SSL utilisant l'authentification par carte CPS. Mon poste fonctionne sous CachyOS (distribution basée sur Arch Linux), avec une version récente de la glibc.
L'installation de la Cryptolib à partir du RPM officiel s'effectue sans difficulté. Le lecteur de cartes est correctement détecté par PC/SC et la carte CPS est parfaitement reconnue :
* lecteur : Alcor Micro AU9540 ;
* carte : CPS3v3 IAS ECC ;
* `pcsc_scan` détecte et identifie correctement la carte.
En revanche, le chargement du module PKCS#11 échoue systématiquement avec le message suivant :
```text
cannot enable executable stack as shared object requires: Invalid argument
Failed to load pkcs11 module
```
Le problème est reproductible avec la commande suivante :
```bash
pkcs11-tool --module /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so --list-slots
```
Après analyse, il apparaît que la bibliothèque `libcps3_pkcs11_lux.so` est distribuée avec un segment ELF `PT_GNU_STACK` marqué **RWE** (pile exécutable) :
```bash
readelf -W -l /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so | grep GNU_STACK
GNU_STACK ... RWE
```
Sur un système équipé de **glibc 2.43**, `dlopen()` refuse de charger cette bibliothèque, ce qui empêche toute utilisation du module PKCS#11.
Après suppression du drapeau « executable stack » à l'aide de la commande suivante :
```bash
patchelf --clear-execstack /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so
```
le segment ELF devient :
```text
GNU_STACK ... RW
```
et le module fonctionne immédiatement sans aucune autre modification :
```bash
pkcs11-tool --module /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so --list-slots
```
retourne alors correctement le lecteur, le token CPS et les informations associées.
Il semble donc que la bibliothèque soit compilée ou empaquetée avec un attribut `PT_GNU_STACK` demandant une pile exécutable alors que celle-ci n'est manifestement pas nécessaire à son fonctionnement.
Une recompilation avec une chaîne d'outils récente, ou une génération du binaire avec une pile non exécutable (par exemple via l'option d'édition de liens `-z noexecstack` ou en supprimant ce marquage lors de la phase de construction), permettrait vraisemblablement d'assurer la compatibilité avec les versions actuelles de la glibc et les distributions Linux récentes.
Configuration utilisée :
* Distribution : CachyOS (Arch Linux)
* glibc : 2.43
* patchelf : 0.19.1
* Lecteur : Alcor Micro AU9540
* Carte : CPS3v3 IAS ECC
* Cryptolib : RPM officiel ANS (version 5.2.4)
Je reste bien entendu à votre disposition pour fournir des informations complémentaires, effectuer d'autres essais ou tester une version corrigée si cela peut vous être utile.
Je vous remercie par avance pour votre retour.
Cordialement,
William Gacquer
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with /opt/santesocial/CPS/lib/libcps3_pkcs11_lux.so and reproduce the failure using pkcs11-tool --module ... --list-slots, then inspect its PT_GNU_STACK entry with readelf. Done means the distributed library no longer requests an executable stack and pkcs11-tool successfully lists the CPS reader and token on glibc 2.43.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- linux
- Domain
- operating-systems, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100