Content Security Policy (CSP) est un entête HTTP (la version sous forme d'attribut dans la balise XHTML « meta » est incomplète) qui permet, à un site web, de fournir, à un navigateur web, des instructions portant sur l'origine des contenus de ce site web. Exemple : "le seul javascript que tu peux exécuter sur ce site web doit provenir de https://jscdn.example". Cela fonctionne avec une politique par défaut couplée à une liste blanche des contenus autorisés à être récupérés. Cela va très loin puisque ça permet d'indiquer l'origine des scripts javascript, des images, des polices de caractère, la destination d'un formulaire web, les pages qui peuvent être incluses dans une balise XTML frame, etc.
Le but de tout cela est d'empêcher le navigateur web du visiteur d'un site web d'inclure et de charger des contenus malveillants, notamment des scripts javascript qui peuvent ensuite servir à tromper l'utilisateur d'un site web, à voler des données (dont des identifiants), à usurper un contenu, etc.
Évidemment, les autorisations sont transitives : si un script JS autorisé tente de charger un JS pas autorisé dans la politique, ça ne fonctionnera pas. De même, la politique est appliquée après la modification du DOM par un script JS, donc il est inutile de tenter de modifier une balise avec du JS autorisé dans l'intention de charger un script JS non autorisé, par exemple.
Comme tout entête, il peut être positionné par le site web (via la fonction header()
de PHP, par exemple) et par le serveur web (module headers d'Apache httpd, par exemple). Il y a un ordre (source) : un entête positionné par une application PHP peut être écrasé par un entête positionné dans la configuration principale du serveur web, qui peut lui-même être supplanté par un entête positionné dans la configuration déportée du serveur web (dite htaccess). Évidemment, il y a des pièges (nous en observerons un plus bas)…
Par défaut, en l'absence d'un entête CSP, les navigateurs web appliquent aucune politique : tout contenu peut être téléchargé depuis n'importe où et utilisé. Évidemment, ça ne veut pas dire qu'une ressource, notamment un script Javascript, peut accéder à n'importe quelle ressource distante, car un autre mécanisme, Cross-origin resource sharing (CORS), empêche cela, j'y reviendrai à la fin de ce shaarli.
L'interprétation de cet entête par les navigateurs web est plutôt strict, donc dès que l'on commence à l'utiliser, il vaut mieux avoir doublement vérifié toute les ressources téléchargées directement ou indirectement sur le site web. Exemple : par défaut, CSP bloque l'exécution du Javascript inline (c'est-à-dire positionné dans la balise XHTML « script ») et l'utilisation de la fonction Javascript « eval() ». Néanmoins, un mécanisme de rapport existe : un navigateur web qui a bloqué du contenu à cause d'une CSP peut le signaler en envoyant un blob JSON à un formulaire web indiqué dans la CSP.
D'un côté, nous avons une application web Java (Tomcat) derrière des frontaux Apache httpd qui effectue une authentification centralisée (Single Sign-On, SSO). Convenons qu'elle est accessible par une seule URL : https://sso.example/ .
De l'autre côté, nous avons un portail internet Java (Tomcat) derrière des frontaux Apache httpd qui inclu (avec une balise XHTML « iframe ») la plupart des sites web que nous mettons à la disposition de notre communauté. Convenons qu'elle est accessible par une seule URL : https://portailweb.example/ .
Il faut être identifié et authentifié (par le SSO) sur le portail web pour que les onglets "contenant" les sites web apparaissent (car on ne présente pas les mêmes à tous nos utilisateurs). Cette authentification n'est pas transitive : le site web inclus ne sait pas si un utilisateur est authentifié sur le portail ou non, il réinterroge toujours le SSO. Nous faisons cela car, d'un point de vue fonctionnel, la plupart des sites web inclus doivent pouvoir être appelés directement (en dehors du portail). Si nous utilisions le portail web comme un proxy SSO, alors les sites web ne pourraient plus être consultés en dehors du portail.
Or, la durée de conservation du ticket délivré par le SSO est variable en fonction des sites web, ce n'est pas le SSO qui peut l'imposer aux applications (enfin si, mais la marge est grande). Donc, il est possible que le portail web continue à considérer qu'un utilisateur est connecté alors que le SSO ne le considère plus de son côté. Ainsi, quand le site web inclus dans le portail interrogera le SSO, celui-ci l'informera que l'utilisateur n'est plus authentifié. Ce site web inclus redirigera alors l'utilisateur vers notre SSO. On aura donc le SSO inclus dans notre portail web.
Voyons comment configurer nos frontaux Apache httpd pour tenir compte de tout ça.
Ces deux entêtes HTTP permettent d'indiquer à un navigateur web qu'un site web peut être inclus (ou non) dans un autre. Elles permettent d'éviter les attaques de type clickjacking genre j'inclus, sur mon site web, le formulaire de ton site web qui octroie des privilèges à un compte utilisateur et je le camoufle derrière du XHTMl/CSS qui te promet ceci ou cela… Tu cliques, comme t'es identifié sur ton site web, ça passe et tu octroies implicitement des droits au compte que j'ai désigné dans la requête. Suite logique des attaques CSRF, attaques que l'on contre facilement avec un token stocké dans la session…
Comme le laisse deviner son nom préfixé par « X- » (pour expérimental), X-Frame-Options est un entête déprécié qui a été remplacé par l'attribut « frame-ancestors » dans la deuxième version de CSP. Source : la norme CSPv2.
Évidemment, tous les navigateurs ne prennent pas en charge tous les entêtes ni tous les attributs et valeurs pour chaque entête. Les navigateurs "récents" (Firefox >= 36, Chrome >= 39, Safari >= 10, Edge >= 15) prennent en charge CSP frame-ancestors et X-Frame-Options. Les "vieux" navigateurs (IE, Edge >= 12, Firefox >= 18) implémentent uniquement X-Frame-Options. Notons que même les versions récentes de Safari, Chrome et Opera ne prennent pas en charge la valeur « ALLOW-FROM » de X-Frame-Options. Sources : 1, 2.
Lors de la résolution des problèmes évoqués ci-dessous, il m'avait semblé qu'il fallait les deux entêtes pour couvrir fonctionnellement notre parc, notamment les machines qui avaient un Firefox pas à jour. En rédigeant ce qui précède des mois après, je suis beaucoup plus sceptique : je pense que nous devrions pouvoir cesser notre utilisation de X-Frame-Options sans impact sur nos utilisateurs, car nous n'avons pas d'aussi vieilles versions de Firefox en circulation et que X-Frames-Options tel que nous l'utilisons (avec l'attribut « ALLOW-FROM ») n'est pas prise en charge par Safari, Opera et Chrome. Donc ça sert uniquement pour IE et les versions mobiles de navigateurs, lesquels ne sont pas dans notre périmètre.
Tu l'as compris : la suite de ce shaarli va traiter de la mise en pratique de CSP uniquement sous l'angle d'un seul de ses attributs, frame-ancestors.
Une dernière note : en cas d'inclusions multiples (site 1 inclus site 2 qui inclus site 3), les navigateurs web, comme la norme le leur permet, peuvent interpréter différemment la somme des CSP (celle du site 3 puis du site 2 puis du site 1) et la comparaison de l'origine (faut-il comparer site 3 avec site 1 ou site 3 avec site 2 ou… ?).
Par défaut, il était impossible d'intégrer notre SSO à tout site web. Nous croyions que c'était à cause d'une interprétation stricte des navigateurs web de l'absence de CSP/X-Frame-Options. Nous verrons, dans le point suivant, que ce n'est pas ça du tout.
Pour pallier à ça, voici le bout de conf' que l'on avait ajouté dans la configuration du virtualhost de nos frontaux SSO :
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self' *.example"
On notera que ces deux entêtes ne signifient pas la même chose. La première, pour les vieux navigateurs, indique que seul notre SSO peut s'inclure lui-même (nous verrons plus bas que ce n'est pas ce que nous voulons). La deuxième, pour les navigateurs web récents, signifie que notre SSO peut s'inclure lui-même ou être inclus par tout site web dont le nom termine par « example » (portailweb.example, autresiteweb.example, etc.). Du coup, le comportement sera différent entre les "vieux" et les "jeunes" navigateurs web. Mais c'est dans cet état que j'ai repris le flambeau.
Le premier problème a été un navigateur web Safari qui indiquait ce qui suit dans sa console lorsqu'on consultait notre portail web :
Multiple 'X-Frame-Options' headers with conflicting values ('SAMEORIGIN, DENY') encountered when loading 'https://sso.example/'. Falling back to 'DENY'.
Refused to display 'https://sso.example/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN, DENY'.
Comme nous venons de le décrire, nous avions pourtant un unique « Header always set X-Frame-Options "SAMEORIGIN" » dans la configuration de nos Apache httpd. D'où peut donc bien venir ce « DENY » ?!
Le code de notre SSO positionne lui aussi cet entête avec la valeur « DENY » (on observe cela en capturant le trafic réseau entre le frontal web et le SSO). Cet entête est conservé par le mod_proxy_ajp d'Apache httpd (ce qui est normal). Notre bout de configuration ne l'écrase pas car le mod_proxy (ajp ou http) utilise la table globale pour stocker les entêtes HTTP récupérés depuis le backend (c'est par ici pour les explications). Or, la directive que nous avons ajoutée indique de positionner l'entête dans la table « always ». Oui, c'est un comportement inverse à celui du mod_fcgi_proxy utilisé avec PHP-FPM qui, lui, peuple la table always et non la table par défaut…
Pour résoudre ce problème, soit on utilise le bout de configuration suivant :
Header set X-Frame-Options "SAMEORIGIN"
Soit le bout de conf' suivant qui a l'avantage de laisser moins de marge d'appréciation :
Header unset X-Frame-Options
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self' *.example"
Notons que nos navigateurs, plus récents, utilisent CSP frame-ancestors et ignorent donc X-Frame-Options conformément à la norme, ce qui fait que nous n'avions pas identifié ce problème avant qu'un utilisateur se ramène avec son Mac + Safari.
Quand nous nous rendons sur notre portail web, la console de développement des anciens navigateurs web, ceux qui ne prennent pas en charge CSP frame-ancestors, affiche :
Refused to display 'https://sso.example' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
Dans les normes du web, une origine, c'est un protocole d'accès (http, https, etc.) + un nom d'hôte (sso.example) + un port. Ainsi, https://portailweb.example:443 n'a pas la même origine que https://sso.example:443 car le nom d'hôte est différent. Même chose avec http://portailweb.example:443 et https://portailweb.example:443 (le protocole change) ainsi qu'avec https://portailweb.example:443 et https://portailweb.example:8443 (le port change).
OK, indiquons clairement que notre portail web peut inclure notre SSO. Changeons la config' du virtualhost du frontal de notre SSO pour celle-ci :
Header unset X-Frame-Options
Header always set X-Frame-Options "ALLOW-FROM https://portailweb.example"
Header always set Content-Security-Policy "frame-ancestors 'self' *.example"
Cela fonctionne. \o/
Ce qui devait arriver est arrivé… Notre SSO doit aussi être inclus par un autre site web que notre portail web.
L'ennui, c'est que, contrairement à CSP, « X-Frame-Options » peut contenir un et un seul « ALLOW-FROM », et ne peut pas contenir un joker (« *.example »), donc, in fine, un seul site web peut être autorisé.
On ne va quand même pas utiliser la valeur « ALLOWALL », sinon tout site web pourrait inclure notre SSO, bonjour l'absence de sécurité…
On ne peut pas renoncer à l'une ou à l'autre des inclusions (c'est-à-dire recoder l'un des sites web afin de se passer des iframes) dans un délai raisonnable…
Le module headers d'Apache httpd permet d'ajouter des entêtes de manière conditionnelle, en fonction de l'existence (ou non) d'une variable d'environnement ou d'une expression rationnelle (qui peut porter sur la valeur d'une variable d'environnement). Parmi la liste des variables d'environnement disponibles, « HTTP_REFERER » retient mon attention.
Si le navigateur web charge notre SSO à partir de notre portail web, alors le referer aura « […]portailweb.example[…] » pour valeur. S'il charge le SSO depuis l'autre site, le referer sera différent. On n'a plus qu'à insérer un entête « X-Frame-Options » en fonction de la situation.
Changeons encore une fois la config' du frontal de notre SSO :
Header unset X-Frame-Options
Header always set X-Frame-Options "ALLOW-FROM https://portailweb.example" "expr=%{HTTP_REFERER} =~ m#portailweb.example#"
Header always set X-Frame-Options "ALLOW-FROM https://autresiteweb.example" "expr=%{HTTP_REFERER} =~ m#autresiteweb.example#"
Header always set Content-Security-Policy "frame-ancestors 'self' *.example"
Cela fonctionne. \o/
Notons que cela fonctionne partiellement avec les extensions de navigateur qui bidouillent le referer afin de préserver la vie privée. Si l'extension est configurée pour effacer totalement le referer, alors notre SSO ne sera pas chargé. Si elle est configurée pour tronquer le referer afin de conserver uniquement le domaine (et d'effacer le reste de l'URL), notre SSO sera chargé. La première configuration est peu courante, car elle casse beaucoup de sites web, donc nous ne la supportons pas. À l'impossible nul n'est tenu.
L'application web shaarli peut être utilisée avec un bookmarlet, c'est-à-dire un bouton qui déclenche un bout de Javascript qui ouvre un pop-up contenant la page "ajout d'un lien" de shaarli et qui y pré-rempli certains champs (titre, URL, etc.).
Avec Firefox, mon bookmarklet ne fonctionne plus sur certains sites web (Github, par exemple) depuis quelques années, c'est-à-dire depuis que Debian empaquette une version de Firefox qui implémente CSP et/ou depuis que la CSP de ces sites web est devenue bloquante.
Je l'ai écrit dans l'introduction de ce shaarli : par défaut, CSP bloque le javascript inline. Or, le bookmarklet shaarli n'est rien de plus qu'un bout de Javascript exécuté dans le contexte d'exécution d'un site web…
Si j'installe un reverse proxy Apache httpd entre mon Firefox et Github, que je le configure pour remplacer l'attribut « script-src github.githubassets.com; » contenue dans la CSP de Github par « script-src 'unsafe-inline' github.githubassets.com; » (toujours avec le module headers), le bookmarlet shaarli fonctionne.
C'est un problème connu. La norme impose que les bookmarklets ne soient pas affectés par le traitement de CSP. Visiblement, Firefox n'avance pas sur ce sujet.
Une extension Firefox qui remplace le bookmarklet existe… Mais pouvons-nous avoir confiance en Aeris ? :))))
Par défaut, un certain nombre d'objets web ne peuvent pas demander à un navigateur web d'émettre des requêtes vers une ressource distante qui n'a pas la même origine (même protocole, même domaine, même port, voir ci-dessus pour plus d'infos) qu'eux. C'est le cas pour les API XMLHttpRequest (AJAX) et Fetch, les polices chargées avec @font-face en CSS, les textures WebGL, les canevas HTML5, etc. Liste complète chez Mozilla. La politique par défaut des navigateurs web est donc « même origine ». Les autres objets (une image, une vidéo, une feuille CSS, une inclusion, etc.) ne sont pas concernés, elles ne sont pas bloquées par défaut.
HTTP Cross-Origin Resource Sharing (CORS) est un ensemble d'entêtes HTTP, de la forme « Origin: » et « Access-Control-* », qui permettent de débrayer ce comportement et d'autoriser un navigateur web qui exécute un objet récupéré sur un site web A à émettre des requêtes destinées à un site web B. Évidemment, c'est le site web qui veut être accessible, le site B dans mon exemple, qui doit positionner des entêtes CORS autorisant le site web A ou tous les sites web.
Cela est utile dans des contextes ou des données sont exposées par des API qui peuvent être consultées en temps réel (XMLHttpRequest). Dans ces contextes, les données sont rarement sur le même domaine que le code qui les formate et les présente (architecture frontend / backend, fournisseurs différents, agrégation de fournisseurs de données, etc.).
Exemple : positionner l'entête « Access-Control-Allow-Origin: * » sur ton site web autorise d'éventuels objets XMLHttpRequest placé sur tout site web à émettre des requêtes destinées à ton site web. Évidemment, on peut préciser une seule origine avec « Access-Control-Allow-Origin: https://front.example.com » + « Vary: Origin ». On a le droit qu'à un seul domaine, mais on peut le faire varier en fonction du header « Origin » inséré par le navigateur web à l'aide de l'insertion conditionnelle d'un entête, comme nous l'avons vu précédemment.
Notons qu'il existe deux types de requêtes XMLHttpRequest / Fetch : des requêtes simples / principales contenant des données utilisateur et des requêtes préliminaires qui ne contiennent pas de données utilisateurs mais qui servent à interroger le serveur web sur les méthodes HTTP (GET, POST, etc.), les types de contenus (application/x-www-form-urlencoded, etc.) et les entêtes qu'il supporte. Les requêtes préliminaires sont obligatoires quand la requête principale utilise des méthodes, des types de contenus et des entêtes qui ne sont pas dans la norme de l'API Fetch. Elles sont générées automatiquement par le navigateur web avant l'émission de la requête principale codée par le développeur de l'application web.
Pour plus d'informations, je recommande la lecture de l'excellente page de Mozilla : Cross-origin resource sharing (CORS) - HTTP | MDN.
Je ne sais pas trop pour quelles raisons tu cites mon shaarli, qui date de 2016, mais soit.
Le numéro 22 de La Revue Dessinée (ce que j'en retiens) évoque justement cette expérience et le livre qui la conteste auquel tu fais référence. Dans ce qui suit, je vais beaucoup m'appuyer sur ce numéro de LRD.
Pour ma part, je suis mitigé.
Oui, Zimbardo aurait eu des convictions qui lui viendraient de son enfance dans le Bronx où il se serait intensément interrogé sur "l'origine du mal" en vivant la violence quotidienne de cet arrondissement de New-York. Il a aussi été influencé par la fin des années 60, le début des années 70, la violence institutionnelle de l'armée américaine et de tout l'appareil d'État, notamment au Vietnam. Bref, il aurait orienté son expérience pour servir l'une de ses croyances, en quelque sorte. Fort bien, la psychologie expérimentale peut entraîner des conclusions subjectives, contrairement aux sciences dures.
Oui, il y a eu une scénarisation de l'expérience : le fait que Zimbardo joue le directeur de la prison, le fait de prétendre que c'est sa collaboratrice / petite amie qui l'a ramené à la raison et lui a fait stopper l'expérience, etc. Quel impact concret cela a-t-il eu sur l'expérience ? On relate aussi que Zimbardo a orienté les comportements des cobayes, notamment en étant lui-même le directeur de la fausse prison et en avalisant implicitement, par ce biais-là, le choix fait par les cobayes gardiens de recourir à une escalade de la violence afin d'assouvir leur besoin d'autorité. Je m'interroge : la hiérarchie pénitencière et la hiérarchie policière n'en font-elles pas tout autant ? N'orientent-elles pas les comportements des flics et des matons ? De part leurs discours, les hauts-gradés, notamment le sinistre de l'Intérieur, n'avalisent-ils pas des comportements détestables des flics ? Donc, pour moi, cela n'est pas un argument suffisant pour réfuter Zimbardo.
Des expériences ultérieures mieux bâties ont confirmé certaines des conclusions de l'expérience de Zimbardo. Exemple : en 2010, celle de Campbell-Meiklejohn, à Cambridge, montre que la soumission à une opinion majoritaire active le système de récompense de notre cerveau. Donc l'obéissance dans les pires actions trouve bien son origine, en partie, dans l'environnement (l'idée majoritaire), ce qui va dans le sens de Zimbardo et de son "il n'y a pas de mauvaises personnes, juste des personnes au mauvais endroit, dans le mauvais carcan".
Enfin, l'expérience de Zimbardo semble avoir été utilisée par l'armée américaine pour mieux oppresser les prisonniers, notamment Irakiens (remember Abu-Graib) dans les guerres post-2001. Difficile de prétendre alors qu'elle est une fraude scientifique en totalité.
Le massif du Mont-Blanc, les gorges de l’Ardèche, la dune du Pilat… Tous ces joyaux du tourisme made in France font partie des 2 700 sites classés selon la loi du 21 avril 1906. Quelque 1,1 million d’hectares de paysages français, soit 2 % du territoire, sont ainsi protégés de l’appétit des promoteurs. De façon simple et diablement efficace : tout projet d’aménagement notable envisagé sur ces sites — défrichage, agrandissement d’un bâtiment, création d’une passerelle — doit obtenir l’aval du ministère de l’Environnement, et passer sous les fourches caudines des inspecteurs des sites classés. Les changements mineurs, quant à eux, sont confiés au préfet.
Un projet de décret, daté du 12 avril, signé par le Premier ministre, Edouard Philippe, et le ministre de la Transition écologique, François de Rugy, prévoit que toute autorisation d’aménagement sera désormais délivrée localement par le préfet, lequel, on le sait, est généralement un ardent défenseur de l’environnement, insensible aux pressions amicales des notables et des entrepreneurs du coin… ll s’agit de « prendre les décisions au plus près du territoire afin de favoriser le dialogue avec les porteurs de projets », explique au « Canard » le cabinet du Premier ministre, ajoutant que cette décision est « dans la ligne de ce qui a émergé du grand débat ». Ah bon ?
Parer au plus préfet
Alexandre Gady, professeur à la Sorbonne (« Le Figaro », 5/4), s’inquiète : « Dans des lieux à forte pression immobilière, où des projets sont repoussés avec constance depuis plusieurs années, comme en Val de Loire ou sur la Côte d’Azur, on risque d’assister à un bétonnage de sites exceptionnels. »
Ce que confirme David Couzin, président de l’Association des inspecteurs des sites et des chargés de mission paysage : « On va voir fleurir les projets d’hôtels cinq étoiles dans les prochains mois, je peux vous le dire ! Les promoteurs connaissent les ficelles locales pour faire passer des projets qu’on repousse depuis des années. Par exemple, dans les Pays de la Loire, l’agrandissement du stade du FC Nantes, des aménagements pour touristes sur le lac de Grand-Lieu, une passerelle géante au-dessus de l’Erdre, etc. Ce décret va mettre en l’air un dispositif qui a un siècle et qui a permis de sauvegarder les paysa- ges remarquables et leur biodiversité. »
Le nouveau monde sera moche, ou ne sera pas !
Hum… J'avais jamais trop pensé à ça : les décisions prises à l'échelle locale sont facilement influençables par les gens et entrepreneurs du coin, la proximité permettant de connaître les ficelles. Mais, d'un autre côté, les décisions prises à des échelles supérieures sont influençables par les grosses sociétés commerciales (inter)nationales via les réseaux d'amitié et les cercles de pouvoir. Pas de solution idéale si ce n'est de renforcer un contre-pouvoir judiciaire ? On notera que la loi Macron de 2015 a réduit les délais et les possibilités d'action des associations de défense de l'environnement en matière de construction, y compris sur sites classés…
Dans le Canard enchaîné du 15 mai 2019.
La CGT, combien de divisions ? Tandis que les premiers délégués faisaient le pied de grue, lundi 13 mai au matin, devant l’accueil du congrès de la confédération à Dijon, les opposants à Martinez procédaient, eux, à d’ultimes réglages au cours d’une dernière réunion… à Montreuil. Pour la première fois depuis la Libération, l’opposition de gauche au secrétaire général représente une force menaçante.
Elle compte — excusez du peu — des fédérations comme celles de la chimie, du commerce et des services, ainsi que des bastions historiques, telles les unions départementales du Nord, des Bouches-du-Rhône, du Val-d’Oise et du Val-de-Marne. Il y a deux mois, ces opposants envisageaient encore de mitonner une candidature contre Martinez. Finalement, ils ont décidé de lui laisser un sursis. Mais, d’ici là, la météo syndicale s’annonce très agitée. En témoignent deux démonstrations de force mêlant, le 27 avril à Paris puis le 1er mai à Marseille, ces opposants aux gilets jaunes et aux Insoumis.
Tapioca englué
Afin de calmer ces impatients, Martinez a d’ailleurs laissé entendre qu’il pourrait partir à mi-mandat. Le secrétaire général sortant doit aussi composer avec un courant « modéré », qui continue de prôner la défense des acquis sociaux par le dialogue. Présent dès la veille de l’ouverture du congrès, Bernard Thibault, qui fut le patron de la CGT pendant quatorze ans, ne s’est pas privé de fustiger, au cœur de sa fan zone, une direction qui ne sait qu’appeler à des manifs et un secrétaire général dont « les épaules ne sont pas assez larges ». Heureusement, on reste entre camarades.
A la veille de l’ouverture du congrès, le moustachu sermonnait les partisans d’une CGT plus tournée vers le combat anticapitaliste, nostalgique de la Fédération syndicale mondiale, qui régnait avant la chute du mur de Berlin. Mais sa seule stratégie, depuis son intronisation, est précisément celle des rouges vifs : enchaîner les journées d’action.
Merci, patron !
« Douze depuis l’arrivée de Macron. Et qu’a-t-il obtenu pour les salariés ? Rien ! » tempête l’un des leaders « réformistes ». Bref, nul ne sait quelle ligne suit Martinez. A part la sienne, évidemment. « Depuis son arrivée, il y a quatre ans, il passe deux jours par semaine à tourner en province pour préparer sa réélection. Il ferait mieux de penser une vraie stratégie », maugrée l’un des anciens salariés de la Confédération. Marcher nuit gravement à la pensée.
Autre souci pour lui : ses « gauchistes » espèrent faire de ce congrès une tribune pour dénoncer son comportement à l’égard des salariés de la CGT, jugé autoritaire. En conséquence, le Général Tapioca vient de retirer la gestion du service d’ordre à la fédération — insuffisamment docile — qui en était chargée. Les remplaçants, recrutés en urgence avant le 1er Mai par l’union régionale d’Ile-de-France, n’ont guère été à la hauteur. La sécurité du congrès a donc été confiée à un privé, fournisseur attitré de la mairie de Dijon, laquelle est dirigée par l’ex-ministre PS du Travail François Rebsamen. Celui-là même contre lequel Martinez avait lancé ses troupes dans la rue.
Exemples d'autoritarisme : Martinez purge la CGT comme un vrai libéral et La CGT combat héroïquement ses ennemis de l’intérieur.
Ah, qu’il est doux d’avoir des ennemis à gauche quand ceux de droite sont trop forts !
L'érosion de la base de la CGT au profit de celle de la CFDT fait s'affoler les loups du troupeau CGT, rien de neuf.
Dans le Canard enchaîné du 15 mai 2019.
Le patron de la mutuelle cultive sa passion pour les bagnoles, les avions et ses enfants.
Qui a tué le nouveau géant français de l’assurance mutualiste ? En moins de quatre mois, le mariage d’AG2R La Mondiale et de la Matmut, qui devait réunir 16 000 collaborateurs, s’est transformé en divorce.
Selon les communiqués officiels, « des divergences de valeurs, de vision et de méthode » ont ruiné cette union. Mais les « valeurs » ont bon dos… Une bagarre féroce a très vite opposé les équipes dirigeantes des deux mutuelles. Les patrons d’AG2R ont constaté que Daniel Havis, le président de la Matmut, ne voulait sûrement pas « mutualiser » le pouvoir, cherchant à évincer deux de leurs dirigeants — ce que le groupe, contacté par « Le Canard », dément. Et ils ont découvert une gestion pour le moins clanique…
Rejetons pas rejetés
Figure incontournable de la mutualité française, Havis, l’homme aux quatre enfants, aux huit Porsche et aux deux avions, qui se vante de gagner 450 000 euros par an, règne depuis vingt-six ans sur la Matmut. Avec le zélé soutien de son épouse, Elisabeth, qui, jusqu’à sa retraite, en 2018, cumulait les fonctions de directrice générale adjointe de la caisse et d’admirfistratrice de plusieurs filiales du groupe normand.
En bon père de famille, Daniel Havis s’est aussi occupé de la carrière de ses enfants. L’aînée, Emilie, travaille pour Visaudio, le réseau mutualiste d’optique et d’audition, dont le conseil de surveillance est présidé par son papa. Le deuxième, Maxime-René, a été bombardé, entre 2013 et 2015, chargé de com’ d’Imsa Racing, l’écurie d’endurance alors sponsorisée à grands frais par la Matmut. Le troisième, Arthur, a été coopté au directoire de Visaudio, tandis que son épouse, Natacha, a été embauchée à la Matmut dans l’équipe de placements immobiliers. Le benjamin, Hector, s’est fait nommer juré du Prix international Matmut de l’orchestre de jazz. Explications de la Matmut : ils ont tous « des formations, des diplômes, des parcours professionnels… » C’est pas beau, l’esprit de famille ?
Havis a d’autres passions. Le rugby, par exemple. Après avoir cumulé 9 millions de pertes, le MTG XV de Montauban, dont la mutuelle était actionnaire et Havis vice-président, a dû déposer le bilan en 2010. Vilain plaquage.
Désormais, le mutualiste s’entiche d’avions. Le 17 avril 2015, la Matmut a pris le contrôle de Phenix, petite compagnie d’aviation d’affaires installée au Havre. En dépit d’une situation économique précaire, la société s’est dotée d’un appareil quasiment neuf, immatriculé F-HMUT. Pour les « opérations d’assistance » et les « rapatriements sanitaires », précise sa direction.
En trois ans, Phenix a accumulé 1,95 million de pertes ! Matmut Développement, la filiale portant la compagnie aérienne (rebaptisée « Air Matmut » en interne), affiche 3 millions de dettes au compteur.
Et le décollage, c’est pour quand ?
Encore un exemple qui illustre pourquoi les frais de gestion des mutuelles dépassent ceux de la sécurité sociale. Salaires mirobolants, entre-soi idéal pour prendre de mauvaises décisions, sponsor sportif et actionnaire pour le prestige / l'image, matraquage publicitaire avec Chevallier et Laspalès, etc. Forcément, tout ça, ça coûte un « pognon de dingue », et c'est répercuté sur les cotisations, contrairement à la sécu…
Dans le Canard enchaîné du 15 mai 2019.
On est fort à cheval sur les principes, chez les patriotes et autres frexiters, on est fier, chacun défend ses idées. Simplement, un sou est un sou, et certains n’oublient pas la règle d’airain des élections européennes : les candidats qui n’obtiennent pas 3 % ne sont pas remboursés de leurs frais de campagne, et ceux qui n’atteignent pas 5 % n’ont aucun élu. Alors, quand les sondages sont un peu faiblards, forcément, on cherche des alliances.
Florian Philippot, qui se traîne aux environs de 2 %, est allé voir ses copains Asselineau et Dupont-Aignan pour leur proposer d’intégrer leur liste en bonne place, avec certains de ses partisans, en échange d’un petit magot : 400 000 euros pour Debout la France, 300 000 euros pour l’UFR. Hélas, ces trois grands esprits se snobent. Le bureau national (!) d’Asselineau s’est prononcé contre la proposition de Philippot, et Debout la France l’a refusée avec dédain. Depuis, Asselineau a traité Philippot d’« escroc politique », et, entre Philippot et Dupont—Aignan, l’ambiance est glaciale.
L’union de la droite hors les murs n’est pas pour demain, même en y mettant le prix.
Ho ? Je croyais que y'a que la gauche qui se disperse façon puzzle dans des guéguerres d'égo et d'idéologie. Tous les journaux, y compris le Canard, l'ont écrit / dit en boucle, donc c'est que ça doit être vrai ! M'auraient-ils mentit par omission ?!
Dans le Canard enchaîné du 15 mai 2019.
Lire l'étiquette d’un vêtement avant de l’acheter est devenu une habitude, histoire de ne pas enfiler trop facilement ce joli tee-shirt bariolé cousu par des esclaves à l’autre bout du monde. Souvent, aussi, la question se pose : mais, au fait, combien gagne l’ouvrier qui a assemblé cette petite robe fleurie ?
Le 7 mai, le Centre Stern pour les affaires et les droits de l’homme de l’université de New York a répondu à cette question. Et le résultat de son rapport est glaçant. Bien loin derrière la Chine, qui paie ses petites mains 326 dollars mensuels, le Kenya (207) ou le Bangladesh (95), l’Ethiopie emporte la palme des ouvriers du textile les plus mal payés du monde, avec un salaire moyen équivalent à 23 euros mensuels.
Et que les grincheux ne viennent pas expliquer que cette aumône est en rapport avec le coût de la vie, car, note encore ce rapport, même en Ethiopie, cette somme « ne suffit pas pour vivre » (« Le Point », 8/5).
Ce qui explique que les ouvrières, jeunes paysannes venues à la ville pour la plupart, quittent leur atelier au bout d’un an, épuisées par les conditions de travail et les grèves incessantes, et dégoûtées par leur semblant de revenu.
Ces parcs industriels, qui emploient 70 000 personnes, ont attiré 2,5 milliards de dollars d’investissements étrangers directs (Chine, Inde) au cours de ces neuf mois. Et l’exportation du « made in Ethiopia » rapporte chaque année 103 millions de dollars de devises au pays.
Le nom des marques qui ne répugnent pas à sous-traiter avec Addis-Abeba ? Guess, H&M, Calvin Klein, notamment. Mais difficile de remonter la piste jusqu’aux ateliers de misère.
Sur le site de vente H&M, par exemple, et alors que la marque suédoise se fait fort d’informer sa clientèle de la provenance d’un pull ou d’un chemisier, la Chine, la Roumanie, la Turquie, la Birmanie ou le Cambodge se bousculent, au milieu de quelques articles mystérieux sobrement estampillés : « Malheureusement, les informations relatives aux fournisseurs et aux usines de fabrication ne sont pas disponibles pour ce produit. »
C’est ballet, ça…
J'en étais resté à l'Ouzbekistan et la collecte du coton sous forme de travail forcé par la dictature…
Puisque les salaires ont diminué, les prix de vente auraient dû diminuer… ou alors la richesse a été captée en chemin, par des actionnaires, par exemple, mais je n'ose y croire, cette sauvagerie ne peut pas avoir cours dans un système capitaliste. De même, tout cela fait écho à notre industrialisation au 18e siècle : ils exploitent des femmes (les hommes préférant posséder la terre, travailler au plein-air, hors des contraintes idiotes des possédants), qu'ils font venir à la ville (où elles sont désorientées, mises en concurrence, etc.), à qui ils construisent des villes ouvrières, etc. Bref, on retrouve toute l'analyse de Marx…
La chaîne d'exploitation de l'homme par l'homme m'effraie… L'occident exploite la Chine, l'Inde, le Bangladesh, etc. qui, eux-mêmes, exploitent l'Ouzbekistan et l'Éthiopie…
Dans le Canard enchaîné du 15 mai 2019.
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is damn vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and aid teachers/students to teach/learn web application security in a class room environment.
Licence : GPL.
Attention : le niveau de sécurité activé par défaut, « impossible », empêche toute attaque. Il faut le réduire en utilisant l'interface web.
Via https://www.it-connect.fr/installation-de-mod_security-devant-un-serveur-web-apache/ .
Très intéressante entrevue avec Alain Damasio, écrivain de dystopies technologiques.
Vous avez un parcours assez atypique. Vous avez fait une prépa HEC, ensuite l’Essec… Vous dites qu’à 21 ans, vous découvrez Deleuze et que ça vous a chamboulé.
Mon père était carrossier et ma mère prof d’anglais. À l’Essec, j’ai subi un choc culturel et sociologique majeur. Je découvre des filles et des fils de chef d’entreprise, d’avocat, de ministre… Tous issus de la strate sociale supérieure, riche, ultrafavorisée… Moi, j’appartiens aux 1 % ou 2 % qui viennent du milieu artisan, ouvrier et qui tombe dans un monde où le capitalisme est l’horizon indépassable de ce qu’on t’apprend. Ce n’est même pas discuté, c’est l’évidence, tout le monde la partage : tu dois faire du profit, « produire de la valeur ». J’ai écrit mon premier livre pour vomir ça. J’avais aussi commencé à lire Foucault, quelques philosophes critiques. Et je tombe sur un petit texte dans L’Autre journal en mai 1990, qui s’appelle « Post-scriptum sur les sociétés de contrôle », de Deleuze. Et là, politiquement, c’est le déclic. À l’époque, j’étais encore arc-bouté sur la vision gauche traditionnelle des méchants : les flics, les médias, le gouvernement… Mais Deleuze montre qu’une mutation profonde est en train de s’opèrer et que nous entrons dans une société de contrôle, moins verticale et plus distribuée, avec des stratégies beaucoup plus insidieuses. Tout le monde devient relais, à son niveau, de ce régime de contrôle. Alors, j’ai écrit La Zone du dehors en me disant qu’il y avait un trou dans la matrice, que les gens ne percevaient pas cette nouvelle emprise. Ça m’a pris trois ans, et, au départ, aucun éditeur n’en voulait. Classique !
[…]
Sur les Gafa, vous avez dit : « Ce n’est même pas eux qui mettent en place le mécanisme d’aliénation, ils ne t’imposent rien. Il faut interroger cette façon que nous avons de nous piéger nous-mêmes. »
À mon sens, aucun complot : les Gafa n’essaient pas de nous contraindre à faire ceci ou cela. Ils nous donnent simplement un ensemble d’outils qui vont nous permettre de maximiser notre auto-aliénation. J’appelle ça le « self-serfvice ». Applis, smartphone, bijoux connectés, jeux vidéos addictifs… Nous y plongeons avec délice tout en sentant très bien les degrés de liberté qu’on y perd. Comme si la liberté, par son ampleur et ses possibilités, nous terrorisait…
Depuis le 16e siècle, La Boétie a théorisé que la servitude est volontaire.
Vous parlez souvent d’un croisement des courbes entre pouvoir et puissance…
Les technologies augmentent notre pouvoir sur le monde, on nous les vend d’ailleurs ainsi. Je définis ce pouvoir comme ce que l’outil te permet de faire, c’est-à-dire d’externaliser, de « faire faire ». Tu « fais faire » à la machine quelque chose, Google cherche pour toi… La puissance, c’est ce que nous sommes capables de réaliser avec nos propres capacités (seul ou en collectif) : intelligence, imagination, capacité à mémoriser… À mes yeux, le pouvoir de la techno et la puissance qu’elle nous offre ont longtemps progressé ensemble (Wikipedia empuissante mon écriture par exemple, j’y trouve une info précieuse très vite que je vais métaboliser dans mon récit). Et puis, à un moment, les courbes se sont inversées. On te propose toujours plus de technologies, de gadgets et d’objets, donc plus de pouvoir tandis que ta puissance n’augmente plus : au contraire, elle s’appauvrit. Je prends souvent l’exemple du GPS. Il t’amène où tu veux, sans réfléchir. Tu ne cherches plus à mémoriser où se situe la mer, l’église, telle avenue ou tel café, tu ne formes plus la ville dans ton espace mental. Si je ne mémorise pas ce qu’il y a dans le « Post-scriptum » de Deleuze, comment en parler ? Je vais prendre un smartphone et je vais vous lire le texte ? Non, on a besoin d’ancrer en nous un certain nombre de concepts pour pouvoir penser. Et tous ces petits actes cognitifs, il est important de les maintenir vivants, actifs, sinon tes puissances personnelles se dévitalisent.
Vous dites aussi que la technologie conjure nos peurs, supprime nos solitudes…
Il y a cette loi du moindre effort, oui, tout autant que ce rapport à la peur. La volonté de contrôle n’est pas un privilège d’État ou de multinationales. Nous sommes tous pris dans ce contrôle
croisé. Une femme va vérifier ce que son mec regarde sur Facebook, quel site il a consulté. Lui-même checke les textos de sa copine, au cas où. Le patron hacke la vie privée de ses salariés et toi-même, quand tu entres dans une boîte, tu vas commencer par googliser ton patron. On multiplie tous ces petits actes de contrôle mutuel qui, au final, tissent une étoffe de surveillance qui nous colle à la peau. Pourquoi ? Parce que ça répond à une incertitude foncière. Nous sommes dans une société moléculaire, faite de petites particules individualisées mises en compétition, harcelées parfois, faisant face à un monde complexe, difficile à anticiper, incertain. Nous ne formons plus des groupes, mais des grappes. Nous demandons à la techno de nous protéger, de nous filtrer ce monde menaçant par communautés de gens qui pensent comme nous pour éviter le confrontation avec « l’étranger ». Ces boucles d’incertitude-peur-contrôle s’entretiennent et se renforcent.
Notons que si la technologie amplifie ce type d'action, il n'y a rien de nouveau : la surveillance existait dans les petits villages. Mais, comme le rappelle Stéphane Bortzmeyer, elle était connue de tous et réciproque. Les actions décrites ci-dessus répondent à ces critères. Peut-être n'est-ce pas le fond du problème ?
Vous êtes très attaché à la colère.
La colère est un don. L’abbé Pierre disait même qu’elle a été son don le plus précieux. La colère qui est pourtant l’un des sept péchés capitaux ! J’avais adoré ça. La colère est une force extraordinaire. Après, il faut l’architecturer, être capable d’en faire un carburant durable, pas juste un moteur à explosion. J’appelle ça la « rage du sage ». Si tu n’as pas de colère, que veux-tu faire d’important ? Tu ne peux pas changer le monde sans ce feu-là.
[…]
Un de vos combats, c’est le transhumanisme, qui vous fait hurler !
Le transhumanisme est l’idéologie terminale des libertariens — aka ceux qui dominent le monde en ce moment, les PDG des Gafa — une sorte d’anartechno—capitalisme. Ils sont convaincus que la technologie peut porter l’humain au stade supérieur, l’améliorer… et nous refourguent ce que j’appelle l’antique désir d’être Dieu : être omniscient, ne plus souffrir de la maladie, « tuer la mort ». Ils méprisent le corps humain, réduit à la viande, comme ils méprisent l’esprit, moins puissant qu’une IA, selon eux. Ils devraient lire Nietzsche : « Le surhumain, c’est l’homme qui va jusqu’au bout de ce qu’il peut. » Tout est déjà en nous, il faut simplement l’éduquer, le nourrir, le déployer.
Le transhumanisme ne serait qu’un mythe contemporain…
Un mythe surgit généralement quand une communauté fait face à des phénomènes ou des événements qu’elle ne peut saisir par ses modes d’intellection habituels : les catastrophes naturelles auparavant, les maladies… Le mythe fait le pont avec le chaos et structure pour nous l’incompréhensible. Cette mythopoïèse baisse logiquement quand la science se déploie. L’intéressant est qu’en ayant créé une technosphère bourgeonnante, floribonde, très difficile à assimiler, se fait jour un besoin de mythe propre à notre époque : celui du transhumain et de la singularité.
Oui, le transhumanisme cherche à combler nos incertitudes et à faire taire nos peurs (de la maladie, de la mort, de ne pas être à la hauteur physiquement et mentalement, etc.). C'est notre mythe moderne… Avant les contes puis la philosophie puis la religion et maintenant, la technologie. Sur ce sujet, je recommande la lecture de L'aberration du solutionnisme technologique.
Dans le Siné mensuel d'avril 2019.
Les crimes d’Etat existent depuis la naissance des Etats. Ce qui est nouveau, c’est que les gouvernements ont tendance à s’en vanter. La France lève un tabou.
La récente exécution en Syrie par les États-Unis des frères Fabien et Jean-Michel Clain, impliqués dans l’attentat du Bataclan sur demande de la DGSE a valu de florence Parly une épitaphe assassine : « Si c’est bien le cas, les Français qui se souviennent de ses appels au meurtre et de son rôle dans le pseudo-État islamique, en seront sûrement soulagés. » L’un et l’autre faisaient pourtant l’objet d’un mandat d’arrêt émis en juin 2018 par un juge parisien, qui se retrouve dès lors dans l’incapacité de faire progresser son enquête. Mais c’est une « vieille tradition ».
Plus de 10000 personnes ont été victimes, pendant la guerre d’Algérie, des « corvées de bois », ces sinistres exécutions sommaires camouflées en tentatives de fuite par l’armée française. Maurice Audin, Mehdi Ben Barka et des milliers d’autres figurent sur la liste de ces crimes perpétrés au nom de la raison d’État. La doctrine française date de De Gaulle : « Pas de Français, pas en France, n’avouez jamais ! »
Il ne s’agit pas de savoir si les victimes de drones auraient pu être interpellées et livrées à la justice. Mais plutôt de l’éviter et de revendiquer comme un succès politique le châtiment immédiat des présumés coupables.
Il suffit de lire les comptes rendus victorieux pour constater que les armées s’autoproclament justicières et ne laissent aucune place à la présomption d’innocence. Pas d’énoncé des charges, pas de défense, pas de juge : la peine de mort est rétablie sans jugement contre des suspects « évidemment » coupables.
Cette nouvelle doctrine est née après le terrible attentat des Jeux olympiques de Munich, commis le 5 septembre 1972. Le gouvernement israélien a immédiatement fait savoir qu’aucun des auteurs ne resterait impuni et les a traqués jusqu’au dernier, tué en 1992.
Longtemps, la France a résisté
C’est Hollande qui, le premier, a avoué : « J’en ai décidé quatre au moins [d’exécutions], mais d’autres présidents en ont décidé davantage » (Un président ne devrait pas dire ça). D’où une véritable bronca de toute la classe politique, qui ne critique pas les crimes mais leur aveu public.
Même la digue protégeant les Français contre leur propre armée a cédé : « En cas de frappe contre des objectifs regroupant d’éventuels combattants francophones, la communication restera prudente et évoquera “l’attaque de lieux d’entraînement des terroristes en Syrie” » (conseil de défense restreint du 5 novembre 2015).
La revendication politique, encore discrète, se profile.
Bien évidemment, les erreurs judiciaires et les victimes collatérales sont les effets secondaires de cette stratégie de la terreur. Mais il s’agit de faire peur et non de faire justice. Dans un domaine heureusement infiniment moins grave, Ségolène Royal dit-elle autre chose en évoquant des jeunes violentés par la police ? « Ça ne leur a pas fait de mal à ces jeunes de savoir ce qu’est le main- tien de l’ordre, la police, se tenir tranquille. Ça leur fera un souvenir. »
Des djihadistes aux gilets jaunes, le droit dérive donc doucement et tous les coups sont désormais permis contre des adversaires soupçonnés de ne pas respecter les lois. Mais lorsqu’un État utilise les moyens illégaux de ses adversaires, c’est précisément les méthodes des assassins qu’il légitime. Et ceux-là obtiennent ce dont ils n’osaient rêver : la fin de l’État de droit. « Un peuple prêt à sacrifier un peu de liberté pour un peu de sécurité ne mérite ni l’une ni l’autre et finit par perdre les deux », a écrit Benjamin Franklin.
Gros +1.
Dans le Siné mensuel d'avril 2019.
À l'évocation de cette B.D., du fait que le renommage des services publics n'est pas seulement un artifice de communication mais l'annonce, par la sémantique, d'une dégradation profonde et d'un abandon des services publics, un collègue m'a raconté que, sur l'application Oui.sncf, des horaires sur plusieurs petites lignes TER ont disparu plus ou moins récemment. Le service client semble informer les clients que lesdits TER circulent toujours, que l'équipe Oui.sncf a choisi de ne pas les afficher, mais que l'on peut toujours les trouver et y réserver une place sur le site web / l'application TER (ter.sncf.com). Donc, quand la SNCF se présente sous le nom de son agence de voyage, elle """"oublie"""" de mentionner des horaires sur des petites lignes pas rentables qu'elle aimerait bien fermer avec la bénédiction du gouvernement. Quand elle se présente sous son nom connoté d'une mission de service public, elle mentionne lesdits horaires. C'est avoir tort que d'avoir raison trop tôt, trouzemillième édition ?
Treize supermarchés, quatre Chronodrive, deux halles, un hypermarché et un centre de préparation Auchan-Direct ! Pendant qu’Auchan brade tous ces sites déficitaires (quitte à les fermer s’il n’y a pas de repreneurs), et que Carrefour prévoit 3 000 départs « volontaires », les projets d’hyper et supermarchés se multiplient. Par exemple à Alès (Gard), où les ouvriers s’affairent, actuellement, à construire un nouveau centre commercial, dénommé « Porte Sud » — 7 000 m2 avec parkings.
Pourtant, en septembre, la ville d’Alès a signé avec l’Etat une très alléchante convention-cadre Action cœur de ville, qui lui permettra de toucher 30 millions d’euros sur trois ans. Lancé voilà un an, ce dispositif a pour but de lutter contre la désertification de 222 villes moyennes. Comment ? En soutenant la « vitalité commerciale » du centre-ville, en limitant l’« implantation des surfaces commerciales en périphérie »…
Selon Rémy Goulet, membre d’un collectif luttant contre ce nouveau centre commercial, « d’un côté, le maire refait des places et des rues avec l’argent de l’Etat ; de l’autre, il envoie les commerces en périphérie ! ».
La mairie d’Alès est loin d’être la seule à bétonner gaiement. Sur les 222 villes bénéficiaires du dispositif Action cœur de ville, 86 d’entre elles ont autorisé, depuis mars 2018, l’extension de leurs zones commerciales installées en périphérie. Place à de nouveaux Lidl, Brico Cash, Gamm vert, etc. !
Alès béton !
A Cahors (Lot), les élus ont approuvé en juillet un projet de retail park (on ne dit plus « centre commercial ») de 6 487 m2. Projet retoqué en janvier par la Commission nationale d’aménagement commercial, qui s’inquiète de l’impact pour le centre-ville… A Perpignan (Pyrénées-Orientales), les élus viennent de resigner un permis de construire pour un nouveau centre commercial déjà retoqué deux fois (8 710 m2). A Arles (Bouches-du-Rhône), les élus ont approuvé l’extension d’un centre Leclerc (8 922 m2), en attendant le méga-complexe Shopping Promenade de 19 000 m2, prévu pour fin 2019…
La palme revient évidemment à Gonesse (Val-d’Oise), qui croit toujours en son projet mahousse d’EuropaCity (750 000 m2), porté par… devinez qui ? Auchan ! Et ce malgré l’annulation, voilà deux mois, du plan local d’urbanisme. Grâce au dispositif Action cœur de ville, Gonesse va recevoir 1 million d’euros pendant cinq ans pour refaire les pavés du centre-ville, installer une crèche et un « espace vente de producteurs locaux en circuit court ». Admirable, sachant qu’EuropaCity va faire disparaître 80 hectares de terres agricoles… Face à ces aberrations, le ministère de la Cohésion des territoires explique que « le dispositif Cœur de ville se veut incitatif et non mercitif ». En effet !
Dans le Canard enchaîné du 8 mai 2019.
Philippe Louis, le président de la petite Confédération française des travailleurs chrétiens (CFTC), vient d’alerter ses troupes. Lors d’une réunion organisée il y a trois semaines avec Muriel Pe'nicaud et ses collaborateurs, une vilaine menace a été proférée à son endroit : la représentativité nationale de la CFTC pourrait être remise en question !
Depuis 2008, les syndicats sont considérés comme représentatifs s’ils ont recueilli plus de 8 % des suffrages aux élections professionnelles dans les entreprises. Avec 9,48 %, la CFTC est bonne dernière. Il suffirait que la ministre relève ce seuil à 10 % pour que le syndicat catho perde sa place dans le club des cinq.
Du mou dans la quête
Pourquoi le ferait-elle ? Parce qu’elle s’alarme du « gauchissement » (sic) de la CFTC, observé notamment lors de ses discussions sur la retraite avec le médiateur Jeau-Paul Delevoye. Philippe Louis a donc ordonné à ses ouailles une plus grande modération à l’égard du gouvernement. Y compris quand Macron entend instaurer un âge pivot à 64 ans et pénaliser ceux qui voudraient partir avant ? Possible : la représentativité permet à la CFTC de participer à toutes les négociations avec le Medef et d’être reçue avec les grands à l’Elysée et à Matignon, mais aussi de toucher de rondelettes subventions. Ainsi, les cotisations des militants ne rapportent que 2 millions à la centrale chrétienne, alors que 17 millions de subventions de l’Etat tombent chaque année dans son escarcelle.
A comparer avec FO (8 millions de cotises, 20,1 millions d’aides publiques) ou la CGT (13,6 millions de la base, pour 27,5 millions de l’Etat). Sans la manne publique, la CFTC risque fort de devoir mettre la clé sous la porte du presbytère…
Dans le Canard enchaîné du 8 mai 2019.
Suite de : Le Conseil contredit le Conseil.
Résultat de leurs grèves, de leurs manifs et de leurs protestations contre les audiences vidéo à la Cour nationale du droit d’asile (CNBA) : les avocats ont remporté deux victoires ! Primo, la nomination d’un médiateur, Alain Christnacht, choisi par le Conseil d’Etat et accepté par les deux parties. Il fallait au moins l’ancien négociateur des accords de Matignon en Nouvelle-Calédonie pour espérer un retour au calme ! Car le torchon crame entre la présidente de la CNBA et les défenseurs. La première raffole de ces audiences par caméras interposées ; les seconds dénoncent la distance entre les juges et les demandeurs d’asile, qui les prive de tout regard humain.
Audiences au rabais
Ce vaste désordre est dû à la loi de novembre 2018, qui supprime le consentement des réfugiés pour comparaître devant des caméras et institue deux « zones pilotes », où se sont tenues les premières audiences filmées, Nancy et Lyon, tandis que les juges officient à Montreuil (Seine-Saint-Denis), siège de la CNBA. Sauf que le médiateur vient — seconde victoire — de suspendre l’application de cette loi.
Finie, pour le moment, cette vidéo-justice, qui n’avait qu’un lointain rapport avec « Vidéo Gag »…
Dans le Canard enchaîné du 8 mai 2019.
Pas un samedi sans des accusations de bavures policières. Depuis le 17 novembre, « Ier acte » des gilets jaunes, l’inspection générale de la police nationale — les bœuf-carottes — laisse mijoter 227 plaintes (chiffre au 30 avril) pour bavures en tout genre (violences avec ou sans armes, injures, etc.). La justice, elle, en a dénombré 291.
Question : combien d’enquêtes ont abouti à ce jour ? Euh… zéro, reconnaissent poulets et magistrats. A Paris, tout de même, selon l’un d’eux, « une quarantaine de procédures ont été clôturées et retournées au parquet. Elles sont actuellement en cours d’analyse ». Il suffit d’être patient…
Pourtant, un fin gant candidat à la présidentielle professait, le 13 mars 2017 : « Dès qu’il y a bavure, il doit y avoir une réponse et une sanction. » Si Castaner avait appliqué à la lettre les consignes de Macron dans les cas les plus simples, l’exécutif n’en serait sans doute pas à devoir justifer les violences policières, et les flics eux-mêmes se seraient sans doute moins lâchés.
Dans son rapport annuel de 2017 (le dernier disponible), l’IGPN indiquait que « la durée moyenne du traitement (des dossiers) s’était allongée de 22 jours » par rapport à 2016. La faute à « une baisse non négligeable d’enquêteurs : de 10 % ». La tendance s’est confirmée en 2018 et, pour 2019, « la priorité des recrutements était la voie publique », observe une huile de Beauvau. Pas les bœuf-carottes… Et les gendarmes ? Ils narguent les flics ! Depuis le 17 novembre, selon leurs propres données, 41 « signalements » ont été effectués, 15 enquêtes enclenchées, 10 classées sans suite, et 5 seulement se trouvent toujours en cours de traitement judiciaire.
De vrais petits saints, ces pandores…
Dans le Canard enchaîné du 8 mai 2019.
TL;DR : le système GNU/Linux Fedora a désactivé la prise en charge des suites cryptographiques reposant sur l'algorithme de chiffrement symétrique 3DES de la bibliothèque cryptographique (mais pas que) NSS qu'il fournit dans ses paquets. Conséquence : le logiciel Firefox packagé dans Fedora n'est plus en mesure d'accéder, en HTTPS, à des sites web qui proposent uniquement des suites cryptographiques qui incluent 3DES.
Ce shaarli est surtout l'occasion de réviser les différentes commandes système qui permettent de diagnostiquer ce genre de cas ainsi que d'apprendre à installer un reverse proxy Apache httpd compatible avec un site web de destination qui accepte uniquement 3DES, ce qui est loin d'être aussi trivial qu'on le pense au premier abord.
Il y a quelques mois, un collègue met à jour sa station de travail Fedora 25/26 (probablement) en Fedora 29. Un des sites web dont nous avons la responsabilité cesse alors de fonctionner avec son Firefox 62 : « An error occurred during a connection to siteweb.example. Cannot communicate securely with peer: no common encryption algorithm(s). Error code: SSL_ERROR_NO_CYPHER_OVERLAP ».
En revanche, cela continue de fonctionner avec son Chrome 72 installé via le paquet rpm récupéré directement sur le site web officiel de Google.
Aucun problème avec Firefox 62 et 66 sur Ubuntu 18.04 et 18.10 ainsi que sur Debian Stretch.
L'erreur est plutôt explicite : le client et le serveur n'ont pas d'algorithmes de chiffrement en commun.
J'utilise les testeurs TLS habituels : le serveur prend en charge uniquement les algorithmes de chiffrement symétrique RC4 et 3DES (la suite cryptographique TLS-RSA-WITH-3DES-EDE-CBC-SHA, pour être précis). Oui, ce site web est un vieux bouzin hébergé sur un système GNU/Linux Debian 4, oui c'est scandaleux, mais si t'es OK pour venir démanteler ce serveur (et surtout tout le bout de SI qu'il contient) gratuitement (si l'on était en capacité d'embaucher, on le ferait ;) ), on prend (attention : il y a des mois de taff, une conduite du changement à mener, etc.). :)
Mon hypothèse est la suivante : dans la pratique, RC4 a été abandonné il y a quelques années, 3DES vient de l'être dans la bibliothèque cryptographique utilisée par Firefox sur Fedora.
Pour le savoir, utilisons leur utilitaire en ligne de commande.
$ openssl s_client -connect siteweb.example:443
140134895833152:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1407:SSL alert number 40
$ gnutls-cli siteweb.example:443
- Handshake was completed
Je n'ai pas trouvé d'outil en ligne de commande pour manipuler la bibliothèque NSS.
Notons que ni 3DES ni RC4 apparaissent dans openssl ciphers
. En revanche, ils apparaissent dans gnutls-cli -l
.
Notons que curl, qui utilise OpenSSL, ne parvient pas à se connecter à notre site web, alors que wget, qui utilise GnuTLS, y parvient.
Note : j'ai rencontré un comportement bizarre. Lors de mon diagnostic avec mon ordinateur professionnel il y a quelques mois, GnuTLS (gnutls-cli
, wget
, etc.) ne parvenait pas à se connecter au site web. Pour y parvenir, il fallait activer les algorithmes de chiffrement dépréciés parmi lesquels se trouvent 3DES avec la commande gnutls-cli --priority LEGACY siteweb.example:443
(gnutls-cli --priority LEGACY -l
affichait 3DES alors que gnutls-cli -l
ne l'affichait pas). Lors de la rédaction de ce shaarli, cela fonctionne avec mon ordinateur personnel et professionnel… Le seul changement que je vois, c'est la mise à jour de mon ordinateur professionnel vers Debian 9.8 ou 9.9. Pourtant, on constate, dans les snapshots Debian, que le paquet libgnutls30 n'a pas été mis à jour ces derniers mois. De même, la date de dernière modification du fichier /usr/lib/x86_64-linux-gnu/libgnutls.so.30.13.1 est le 6 octobre 2018, ce qui correspond à ce qui est consigné dans /usr/share/doc/libgnutls30/changelog.Debian.gz. Bref, le mystère reste entier…
Avec openssl s_client
, le comportement est identique à celui observé précédemment : impossible de négocier une session TLS.
$ gnutls-cli siteweb.example:443
*** Fatal error: A TLS fatal alert has been received.
*** Received alert [40]: Handshake failed
*** handshake has failed: A TLS fatal alert has been received.
Il n'est pas possible d'activer 3DES avec gnutls-cli --priority LEGACY
, car 3DES ne figure pas dans la liste des algorithmes membres de ce groupe.
On se souvient que les chaînes de priorité de GnuTLS, c'est comme les profils d'OpenSSL : la liste des suites cryptographiques membres d'un de ces groupes peut changer sans prévenir entre deux versions. Il est possible d'utiliser explicitement la suite cryptographique TLS-RSA-WITH-3DES-EDE-CBC-SHA qui nous intéresse avec la commande suivante : gnutls-cli --priority "NORMAL:+3DES-CBC" siteweb.example:443
. Notre site web est alors accessible.
On constate une différence de comportement entre deux bibliothèques cryptographiques très utilisées : les suites cryptographiques utilisant 3DES pour le chiffrement symétrique ne sont plus disponibles dans OpenSSL mais continuent de l'être dans GnuTLS.
On constate également une différence entre deux systèmes GNU/Linux pour une même bibliothèque : les suites cryptographiques embarquant 3DES ne peuvent pas être utilisées avec Fedora 30 et GnuTLS, alors qu'elles le peuvent avec Debian et GnuTLS. Il est également crédible de penser que le retrait de 3DES la priorité LEGACY a eu un impact sur les logiciels qui utilisent GnuTLS en spécifiant ce groupe de suites cryptographiques. Dit autrement : sauf si un logiciel qui repose sur la libgnutls spécifie explicitement l'utilisation de 3DES, 3DES n'est plus disponible.
J'utilise la version 60.6 ESR de Firefox, celle packagée dans le dépôt officiel de Debian. L'accès au site web fonctionne. En revanche, si je désactive 3DES en changeant, dans about:config
, la valeur de security.ssl3.rsa_des_ede3_sha
à false
, alors le site web ne fonctionne plus. Cela confirme la piste de la prise en charge ou non de 3DES comme source de notre problème.
Je pensais qu'un ldd /usr/lib/firefox-esr/firefox-esr
suffirait pour démasquer la bibliothèque cryptographique utilisée par Firefox… mais ce n'est pas le cas. Et pour cause : le vrai exécutable de Firefox est libxul.so
. Il s'agit d'un objet partagé, comme la plupart des binaires de base. ldd /usr/lib/firefox-esr/libxul.so
nous montre que la lib TLS utilisée est /usr/lib/firefox-esr/libssl3.so
.
$ apt-file search /usr/lib/firefox-esr/libssl3.so
firefox-esr: /usr/lib/firefox-esr/libssl3.so
La libssl3 est fourni avec le paquet Firefox lui-même.
Si nous nous amusons à récupérer toutes les chaînes de caractères contenues dans le binaire avec la commande strings /usr/lib/firefox-esr/libssl3.so
, nous nous rendons compte que nous sommes en présence d'un bout de la fameuse bibliothèque NSS (« Version: NSS 3.36.7 »). Si nous nous amusons avec objdump -T /usr/lib/firefox-esr/libssl3.so
nous nous rendons compte que cette bibliothèque contient bien les fonctions qui permettent d'établir une session TLS avec NSS (« SSL_ResetHandshake », « PR_Read », etc.).
J'aurais voulu m'assurer que c'est bien cette bibliothèque qui est utilisée pour établir des connexions TLS, mais je ne suis pas parvenu à mes fins avec ltrace
qui permet de tracer les appels aux bibliothèques. ltrace -f firefox-esr
est bien trop lent, Firefox est inutilisable (on parle de plusieurs dizaines de minutes pour ouvrir un Firefox vierge, et impossible de manipuler les onglets). ltrace -p <PID_Firefox> -l /usr/lib/firefox-esr/libssl3.so
et ltrace -p <PID_Firefox -e SSL_ResetHandshake
avec un ltrace
par processus Firefox, retournent rien, aucun appel. C'est le cas de plein de binaires (wget, curl, gnutls-cli, etc.) alors que ça fonctionne avec d'autres (openssl s_client, ls, etc.)… Je n'ai pas l'explication.
Un autre moyen de débusquer la lib NSS (libssl3.so) est d'utiliser strace -f -e open,openat firefox-esr
. C'est d'ailleurs la piste que j'ai choisie initialement. En passant, rappelons-nous que la différence entre ldd
et strace
, c'est que la première commande montre la théorie, c'est-à-dire ce qui se passerait si on appelait le linker en exécutant ce binaire. C'est une simulation. La deuxième commande montre ce qui s'est réellement passé. La théorie peut être contournée par le programme lui-même. En surchargeant « LD_LIBRARY_PATH », par exemple. C'est d'ailleurs ce que fait Firefox. Pour observer cela, il suffit d'utiliser la commande suivante : tr '\0' '\n' < /proc/<PID_Firefox>/environ | grep LD_LIBRARY_PATH
. Sur le processus Firefox parent, la variable d'environnement n'existe pas. En revanche, elle est bien positionnée sur les processus enfant. On comprend maintenant un peu mieux ce que fait le mini-binaire /usr/lib/firefox-esr/firefox-esr . ;)
Pour identifier libxul.so, j'ai utilisé ncdu /usr/lib/firefox-esr/
pour chercher l'objet ayant une occupation sur le disque crédible pour un navigateur moderne alors que le binaire firefox-esr
occupe seulement quelques kilooctets.
Mon collègue utilise la version 66 de Firefox, celle packagée dans le dépôt officiel de Fedora. L'accès à notre site web ne fonctionne pas. La valeur de security.ssl3.rsa_des_ede3_sha
est bien « true ».
Identifions la bibliothèque TLS utilisée par Firefox :
$ whereis -b firefox
firefox: /usr/bin/firefox /usr/lib64/firefox /etc/firefox
[ comprendre le script /usr/bin/firefox ]
$ strace -f -e open,openat /usr/lib64/firefox/firefox 2>&1 | grep -E '(ssl|tls|nss)'
openat(AT_FDCWD, "/usr/lib64/firefox/libssl3.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/libssl3.so", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/usr/lib64/firefox/libnss3.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/libnss3.so", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/usr/lib64/firefox/libnssutil3.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/libnssutil3.so", O_RDONLY|O_CLOEXEC) = 4
[…]
$ rpm -qf /lib64/libssl3.so
nss-3.43.0-1.fc30.x86_64
On constate que, là aussi, le binaire firefox
surcharge LD_LIBRARY_PATH. Mais, contrairement à Debian, la bibliothèque NSS n'est pas livrée avec le paquet firefox
donc elle est introuvable à l'emplacement indiqué, donc le linker se rabat sur la bibliothèque NSS livrée par le paquet nss
et installé dans le dossier système.
Je me suis heurté à la même limite concernant l'utilisation de ltrace
.
J'ai obtenu la certitude que c'est la libssl3 est bien la lib utilisée pour effectuer des échanges TLS en virant le paquet nss
sans virer les paquets qui dépendent de lui avec rpm -e --nodeps nss
et en utilisant la lib NSS de mon Debian. Notre site web fonctionnait alors très bien.
Notre site web fonctionne sur un système Ubuntu 16.04 avec un Firefox 62 ainsi que sur un Ubuntu 18.04 avec un Firefox 65.
Sur le Firefox 65, la bibliothèque TLS utilisée est /usr/lib/firefox/libssl3.so
, fournie par le paquet firefox
.
ldd
/ ltrace
/ strace
: ldd c'est la théorie, une simulation, strace, c'est la pratique, une description factuel de ce qui s'est passé ;nss
avec rpm -q --changelog nss
, mais il y a rien d'intéressant (« Update to » telle version, « Rebuild for » tel événement majeur, etc.). J'ai aussi lu les notes de versions du projet NSS jusqu'à la version 3.20, sans succès. Vu la différence de version, je penche pour un changement côté Fedora.strace
, la bibliothèque utilisée est celle fournie dans l'archive. strings
ne permet pas de récupérer la version ni beaucoup d'info, un nettoyage ayant été fait, il faut croire. En tout cas, tout laisse à penser que c'est Fedora qui a changé les drapeaux de compilation de la lib NSS qu'elle fournit dans son dépôt, pas Firefox.Ben oui, mon collègue rapporte que notre site web est toujours accessible avec Chrome 72 sous Fedora 29. Comment est-ce possible ? La première idée qui vient à l'esprit est que Chrome utilise une autre bibliothèque cryptographique. Laquelle ?
$ whereis google-chrome
google-chrome: /usr/bin/google-chrome /usr/share/google-chrome /usr/share/man/man1/google-chrome.1.gz
$ file /usr/bin/google-chrome
/usr/bin/google-chrome: symbolic link to /etc/alternatives/google-chrome
$ file /etc/alternatives/google-chrome
/etc/alternatives/google-chrome: symbolic link to /usr/bin/google-chrome-stable
$ file /usr/bin/google-chrome-stable
/usr/bin/google-chrome-stable: symbolic link to /opt/google/chrome/google-chrome
$ file /opt/google/chrome/google-chrome
/opt/google/chrome/google-chrome: Bourne-Again shell script, ASCII text executable
[ comprendre ce script … ]
$ file /opt/google/chrome/chrome
/opt/google/chrome/chrome: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=0da5431fb81fa27f574e46f3bb0d66397b34ed74, stripped
$ ldd /opt/google/chrome/chrome | grep -E '(nss|ssl|tls)'
libnss3.so => /lib64/libnss3.so (0x00007fe1ff5f2000)
libnssutil3.so => /lib64/libnssutil3.so (0x00007fe1ff5bf000)
libgnutls.so.30 => /lib64/libgnutls.so.30 (0x00007fe1fe11b000)
Ainsi Google Chrome utiliserait la lib GnuTLS ? Pourtant, nous avons vu qu'il faut spécifier explicitement 3DES (seul ou parmi une liste) pour que cet algorithme de chiffrement symétrique soit utilisable. Google ferait-il ça ?
Je trouve curieux que GnuTLS ne soit pas indiquée comme dépendance de Chrome dans le .deb et le .rpm fournis par Google… Pour savoir cela, il faut consulter le fichier nommé « control » dans le dossier « DEBIAN » en utilisant un gestionnaire d'archives pour ouvrir le .deb. Pour le rpm, il faut utiliser la commande rpm -qp --requires <fichier_rpm>
. Ceci dit, ce n'est pas une référence fiable : le rpm mentionne une dépendance à libssl3 >= NSS 3.28, alors que cette librairie n'est pas du tout utilisée…
En cherchant sur le web, je constate que, si GnuTLS fut utilisé, il semblerait qu'aujourd'hui, ce soit BoringSSL, un fork maison d'OpenSSL suite à l'affaire Heartbleed, qui l'est.
Pourquoi ldd
et strace
ne voient aucun appel à cette bibliothèque ? Peut-être parce qu'elle est compilée statiquement alors que ldd
et strace
permettent uniquement d'identifier les chargements dynamiques ? Vérifions :
$ strings /opt/google/chrome/chrome
[…]
../../third_party/boringssl/src/ssl/tls13_client.cc
../../third_party/boringssl/src/ssl/tls13_server.cc
../../third_party/boringssl/src/ssl/tls13_both.cc
../../third_party/boringssl/src/ssl/dtls_record.cc
../../third_party/boringssl/src/ssl/tls_record.cc
../../third_party/boringssl/src/ssl/dtls_method.cc
../../third_party/boringssl/src/ssl/tls_method.cc
../../third_party/boringssl/src/ssl/tls13_enc.cc
../../third_party/boringssl/src/crypto/cipher_extra/e_tls.c
[…]
TLS_RSA_WITH_NULL_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
TLS_PSK_WITH_AES_128_CBC_SHA
TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_PSK_WITH_AES_256_CBC_SHA
TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
[…]
LS_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_CHACHA20_POLY1305_SHA256
TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
[…]
TLS_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
[…]
TLSV1_ALERT_ACCESS_DENIED
TLSV1_ALERT_DECODE_ERROR
TLSV1_ALERT_DECRYPTION_FAILED
TLSV1_ALERT_DECRYPT_ERROR
TLSV1_ALERT_EXPORT_RESTRICTION
TLSV1_ALERT_INAPPROPRIATE_FALLBACK
TLSV1_ALERT_INSUFFICIENT_SECURITY
TLSV1_ALERT_INTERNAL_ERROR
TLSV1_ALERT_NO_RENEGOTIATION
TLSV1_ALERT_PROTOCOL_VERSION
TLSV1_ALERT_RECORD_OVERFLOW
TLSV1_ALERT_UNKNOWN_CA
TLSV1_ALERT_USER_CANCELLED
TLSV1_BAD_CERTIFICATE_HASH_VALUE
TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
TLSV1_CERTIFICATE_REQUIRED
TLSV1_CERTIFICATE_UNOBTAINABLE
TLSV1_UNKNOWN_PSK_IDENTITY
TLSV1_UNRECOGNIZED_NAME
TLSV1_UNSUPPORTED_EXTENSION
En effet, ça ressemble quand même bien à ce que l'on trouve dans une bibliothèque cryptographique.
Google Chrome 72 sous Fedora 29 continue d'afficher notre site web car il utilise une bibliothèque interne et que Google n'a pas désactivé 3DES dans celle-ci.
Même si la bibliothèque NSS ne prend plus en charge 3DES uniquement sur Fedora, même si la majorité des navigateurs peuvent toujours accéder à notre site web "3DES-only", nous avons décidé d'installer un reverse proxy HTTP en frontal de notre site web "3DES-only". De toutes façons, c'était un point dans notre liste des choses à faire, cette histoire n'a fait que nous le remettre à l'esprit.
Pour ce faire, nous utiliserons Apache httpd sur un système GNU/Linux Debian. Parce que c'est ce qu'on connaît, parce que c'est ce qu'on a en prod'.
La question qui se pose est : quelle configuration pour notre reverse proxy ?
On pourrait se passer de TLS entre le reverse proxy et le site web. Ce n'est pas très cool, mais les deux serveurs sont sur le même réseau, branchés au même commutateur, donc bon… Si l'on se fait pirater à ce niveau-là, il y a des choses bien plus lucratives à faire qu'espionner les conversations entre ce futur reverse proxy et ce site web.
Mais cela ne fonctionnera pas, car notre site web propose des redirections HTTP aux navigateurs web, soit en utilisant la balise HTML meta refresh, soit en utilisant la fonction header
de PHP. Dans les deux cas, le protocole indiqué dans l'URL à laquelle le navigateur doit se rendre est parfois « https ». On obtiendrait donc une boucle infinie : notre proxy discute en http avec notre site web, celui-ci le redirige vers une URL HTTPS, on transmet au client, celui-ci revient discuter avec le proxy en https, le proxy discute en http avec le site web, qui lui dit de revenir en https, etc.
Comme une majorité de personnes, nous utilisons le module mod_ssl d'Apache httpd. Celui-ci repose sur OpenSSL… qui, comme nous l'avons vu au début de ce shaarli, ne prend plus en charge 3DES quand elle est fournie par le système de paquets d'un système Debian 9.
Tentons quand même avec cette configuration Apache httpd minimale :
SSLProxyEngine on
ProxyPass "/" "https://backend-siteweb.example/"
ProxyPassReverse "/" "https://backend-siteweb.example/"
Notre navigateur affiche une page d'erreur « 502 - proxy error ». Le journal d'erreur du virtualhost Apache httpd consigne :
[proxy_http:error] [pid 30044] (103)Software caused connection abort: [client 127.0.0.1:34358] AH01102: error reading status line from remote server backend-siteweb.example:443
[proxy:error] [pid 30044] [client 127.0.0.1:34358] AH00898: Error reading from remote server returned by /
Le module mod_gnutls permet à Apache httpd d'utiliser la bibliothèque GnuTLS pour établir les connexions chiffrées. Au début de ce shaarli, nous avons vu que 3DES n'est pas (encore) désactivé dans cette bibliothèque quand elle est fournie par le système de paquets d'un système Debian 9. La documentation de mod_gnutls est disponible ici.
Pour installer ce module :
apt-get install libapache2-mod-gnutls
;a2dismod ssl && a2enmod gnutls && systemctl restart apache2
.
Sa configuration est un peu plus complexe.
Pour activer TLS entre le proxy et le site web (« GnuTLSProxyEngine »), il faut également activer TLS entre le client et le proxy (« GnuTLSEnable »). Dit autrement, il n'est pas possible de communiquer de manière non chiffrée (HTTP) avec le client tout en communiquant de manière chiffrée (HTTPS) avec le site web. Ce comportement est plutôt inattendu et diffère de celui de mod_ssl. Notons qu'il est parfois difficile de se rendre compte de ce point : si la destination du proxy est un vieux site web, une communication HTTP non chiffrée est tentée par mod_proxy_http après l'échec de l'établissement de la connexion TLS et aucune erreur TLS est consignée dans le journal d'Apache httpd.
« GnuTLSEnable » impose de préciser la valeur des directives « GnuTLSCertificateFile », « GnuTLSKeyFile » et « GnuTLSPriorities ». Si les deux premières sont habituelles, la dernière est plus suprenante… Sans elle, un systemctl restart apache2
échoue sans rien consigner côté systemd/journald. Mais le journal d'erreur du virtualhost indique clairement « GnuTLS: Host 'siteweb.example:0' is missing the GnuTLSPriorities directive! ».
De la même façon, « GnuTLSProxyEngine » impose de préciser la valeur de la directive « GnuTLSProxyPriorities ». Sans elle, le journal d'erreur du virtualhost consigne « Host 'siteweb.example:0' is missing the GnuTLSProxyPriorities directive! mgs_hook_post_config: loading proxy credentials for host 'siteweb.example:0' failed, exiting! ».
Même si le certificat x509 du site web est signé par une autorité de certification publique reconnue, « GnuTLSProxyEngine » impose de préciser un catalogue contenant les certificats des autorités de certificats publiques reconnues. Je vais utiliser /etc/ssl/certs/ca-certificates.crt
qui est généré et maintenu à jour par le paquet Debian ca-certificates
. Bout de conf' à utiliser dans le virtualhost : « GnuTLSProxyCAFile /etc/ssl/certs/ca-certificates.crt ». Sans cela, le journal d'erreur du virtualhost indique :
[gnutls:warn] [pid 7562] load_proxy_x509_credentials: no CA trust list for proxy connections, TLS connections will fail!
[gnutls:warn] [pid 7565] [remote 192.0.2.1:443] gtls_check_server_cert: The certificate is NOT trusted. The certificate issuer is unknown.
[proxy_http:error] [pid 7565] (104)Connection reset by peer: [client 127.0.0.1:38258] AH01102: error reading status line from remote server backend-siteweb.example:443
[proxy:error] [pid 7565] [client 127.0.0.1:38258] AH00898: Error reading from remote server returned by /
Les deux dernières lignes indiquent que l'échec de l'initialisation de la connexion TLS n'a pas empêché mod_proxy_http de tenter une connexion HTTP. Un tcpdump
confirme cela : une requête non chiffrée est envoyée au port 443 du site web de destination. Ce comportement est totalement différent de celui de mod_ssl.
Au final, la configuration minimale pour ce reverse proxy est :
<VirtualHost *:443>
ServerName siteweb.example
ServerAdmin www@exemple
GnuTLSEnable on
GnuTLSCertificateFile /chemin/vers/certification/x509.crt
GnuTLSKeyFile /chemin/vers/cle/privee.key
GnuTLSPriorities NORMAL
GnuTLSProxyEngine on
GnuTLSProxyPriorities NORMAL
GnuTLSProxyCAFile /etc/ssl/certs/ca-certificates.crt
ProxyPass "/" "https://backend-siteweb.example/"
ProxyPassReverse "/" "https://backend-siteweb.example/"
ErrorLog /var/log/apache2/siteweb.example/error.log
CustomLog /var/log/apache2/siteweb.example/access.log combined
</VirtualHost>
Sur un système GNU/Linux Debian 8, la prise en charge des suites cryptographiques qui utilisent 3DES comme algorithme de chiffrement symétrique n'est pas désactivée dans OpenSSL. On peut donc utiliser mod_ssl de la manière la plus basique qui soit :
<VirtualHost *:443>
ServerName siteweb.example
ServerAdmin www@exemple
SSLEngine on
SSLCertificateFile /chemin/vers/certification/x509.crt
SSLCertificateKeyFile /chemin/vers/cle/privee.key
SSLProxyEngine on
ProxyPass "/" "https://backend-siteweb.example/"
ProxyPassReverse "/" "https://backend-siteweb.example/"
ErrorLog /var/log/apache2/siteweb.example/error.log
CustomLog /var/log/apache2/siteweb.example/access.log combined
</VirtualHost>
Au final, nous avons retenu cette solution. Raisons : mod_gnutls est plus capricieux que mod_ssl, il a des comportements inattendus (ne pas interrompre mod_proxy_http quand la connexion TLS n'a pas pu être établie), il est moins documenté et nous avons l'habitude de mod_ssl.
Cash Investigation enquête sur les logements sociaux.
Mes notes :
On peut être social-démocrate et gagner un scrutin national. Si, si. Manuel Valls pourrait y réfléchir ! Le contre-exemple a une belle gueule, de l’endurance et a, durant ses dix mois de gouvernement, mené une politique de gauche ambitieuse : augmentation sur deux ans de 36 % du salaire minimum et accès universel au service national de santé.
Résultat : Pedro Sanchez et son parti, le PSOE, se retrouvent largement en tête, avec 123 députés, soit 38 de plus qu’en 2016, tandis que le grand parti de droite conservatrice, le Parti populaire, s’effondre et perd plus de la moitié de ses sièges (66). L’extrême droite fait son entrée au Parlement (24 députés), sans être en mesure d’y avoir de l’influence.
La majorité absolue en Espagne étant de 176 députés, Sanchez va devoir nouer des alliances. Son allié d’extrême gauche, Podemos, montrant d’inquiétants signes de faiblesse (42 sièges), il va falloir trouver des renforts chez les Basques et les nationalistes catalans (dont 5 sont élus et en prison), qui ont obtenu 22 sièges. Et le PSOE sera de nouveau à la merci d’un vote de défiance, le parti refusant toujours aux Catalans un référendum d’autodétermination. En février, ce sont les Catalans qui ont fait tomber Sanchez, en votant contre le budget.
De quoi faire réfléchir aux « charmes » de la proportionnelle intégrale.
De quoi réfléchir également aux apports et aux limites de Podemos : gouvernement instable depuis des années, bipartisme encore bien présent, misère suffisamment prégnante pour que l'extrême-droite perce, etc. Donc ouais, la hausse du SMIC de 36 % découle de cette misère, pas tellement de l'action de Podemos…
Dans le Canard enchaîné du 30 avril 2019.
La Cour des comptes a reçu de Macron la mission de chiffrer l’évasion et la fraude fiscales. La Caisse d’allocations familiales, elle, ne cesse de traquer les fraudeurs aux prestations sociales. Les derniers résultats, dont rend compte « Le Figaro » (26/4), sont édifiants. « L’impact financier [des] manœuvres frauduleuses (au nombre de 44 897) représente 304,6 millions d’euros sur les 73,2 milliards versés en 2017 aux 12,7 millions d’allocataires. » Si l’on compte bien, cela donne 1 fraudeur pour 283 allocataires, et une fraude totale qui représente 0,40 % des allocations distribuées.
C’est beaucoup et peu à la fois !
Je conteste le résumé « 1 fraudeur pour 283 allocataires » : un même allocataire peut commettre plusieurs manœuvres frauduleuses sur plusieurs prestations sociales. C'est d'ailleurs ce qui est mentionné à la fin de l'article du Figaro cité par le Canard. Pour 2018, la Cnaf déclare 0,35 % d'allocataires-"fraudeurs" soit 44 450 soit 1 allocataire sur 286.
On notera aussi le ratio qui est présenté par le Canard : fraudes de 2018 sur le montant total des prestations 2017… Pourtant, le montant total des prestations versées en 2018 est mentionné à la fin du même rapport : 90,2 milliards d'euros. Donc le montant total des fraudes 2018 représente (304,6/90200)*100 = 0,33 % du montant total des prestations.
Alors, les journalistes, vous pouvez vous remuer un peu, svp ?
J'ai envoyé le courriel suivant au Canard :
Bonjour,
Je réagis à l'article suivant publié dans le bandeau gauche de la 8e page du numéro 5139 du 30 avril 2019 du Canard :
La Cour des comptes a reçu de Macron la mission de chiffrer l’évasion et la fraude fiscales. La Caisse d’allocations familiales, elle, ne cesse de traquer les fraudeurs aux prestations sociales. Les derniers résultats, dont rend compte « Le Figaro » (26/4), sont édifiants. « L’impact financier [des] manœuvres frauduleuses (au nombre de 44 897) représente 304,6 millions d’euros sur les 73,2 milliards versés en 2017 aux 12,7 millions d’allocataires. » Si l’on compte bien, cela donne 1 fraudeur pour 283 allocataires, et une fraude totale qui représente 0,40 % des allocations distribuées. C’est beaucoup et peu à la fois !
Cet article manque de rigueur sur deux points :
44 897 manœuvres frauduleuses, cela ne signifie pas 44 897 fraudeurs : un même allocataire peut commettre plusieurs manœuvres frauduleuses sur plusieurs prestation familiales. C'est d'ailleurs mentionné à la fin de l'article du Figaro auquel le Canard fait référence. Dans son rapport 2019, la Cnaf déclare 0,35 % d'allocataires-"fraudeurs" en 2018 soit 44 450 allocataires soit 1 allocataire sur 286.
- Pourquoi évoquer, et utiliser dans votre calcul, le montant total des prestations versées en 2017 alors que celui de 2018 est disponible dans le même rapport de la Cnaf (90,2 milliards) ?! Donc, la fraude totale représente 0,33 % des allocations distribuées en 2018.
Bonne journée.
Dans le Canard enchaîné du 30 avril 2019.
Se faire représenter dans les manifs en restant chez soi est désormais possible : il suffit de payer 15 euros sur le site Wistand (BFMTV, 24/4) : « Une fois la manifestation commencée, le manifestant rémunéré est géolocalisé toutes les trentes secondes afin que le client puisse vérifier sa bonne implication. » Moyennant quelques euros supplémentaires, on peut même demander au « manifestant » de porter un tee-shirt avec le message äe son choix.
Moralité réjouissante : plus il y aura de manifs, moins il y aura de chômage.
Je suis tout seul à trouver cela insensé ? :O Déléguer un acte de contestation à une personne précaire prête à tout pour survivre… On en est vraiment là…
Dans le Canard enchaîné du 30 avril 2019.