{"id":1016539,"date":"2023-11-14T17:07:04","date_gmt":"2023-11-14T19:07:04","guid":{"rendered":"https:\/\/teknomers.com\/fr\/risques-ci-cd-proteger-vos-pipelines-de-developpement-logiciel\/"},"modified":"2023-11-14T17:07:09","modified_gmt":"2023-11-14T19:07:09","slug":"risques-ci-cd-proteger-vos-pipelines-de-developpement-logiciel","status":"publish","type":"post","link":"https:\/\/teknomers.com\/fr\/risques-ci-cd-proteger-vos-pipelines-de-developpement-logiciel\/","title":{"rendered":"Risques CI\/CD\u00a0: prot\u00e9ger vos pipelines de d\u00e9veloppement logiciel"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a rel=\"nofollow\" href=\"https:\/\/teknomers.com\/fr\/wp-content\/uploads\/2023\/11\/Risques-CICD-proteger-vos-pipelines-de-developpement-logiciel.png\" style=\"clear: left; display: block; float: left; text-align: center;\"><\/a><\/div>\n<p>Avez-vous entendu parler de Dependabot ?  Sinon, demandez \u00e0 n&#8217;importe quel d\u00e9veloppeur autour de vous, et il sera probablement ravi de la fa\u00e7on dont cela a r\u00e9volutionn\u00e9 la t\u00e2che fastidieuse de v\u00e9rification et de mise \u00e0 jour des d\u00e9pendances obsol\u00e8tes dans les projets logiciels. <\/p>\n<p>Dependabot s&#8217;occupe non seulement des v\u00e9rifications \u00e0 votre place, mais propose \u00e9galement des suggestions de modifications qui peuvent \u00eatre approuv\u00e9es en un seul clic.  Bien que Dependabot soit limit\u00e9 aux projets h\u00e9berg\u00e9s sur GitHub, il a \u00e9tabli une nouvelle norme permettant aux fournisseurs continus d&#8217;offrir des fonctionnalit\u00e9s similaires.  Cette automatisation des t\u00e2ches \u00ab administratives \u00bb est devenue une norme, permettant aux d\u00e9veloppeurs d&#8217;int\u00e9grer et de d\u00e9ployer leur travail plus rapidement que jamais.  Les workflows d&#8217;int\u00e9gration et de d\u00e9ploiement continus sont devenus la pierre angulaire de l&#8217;ing\u00e9nierie logicielle, propulsant le mouvement DevOps \u00e0 l&#8217;avant-garde du secteur.<\/p>\n<p>Mais un <a rel=\"nofollow noopener\" href=\"https:\/\/checkmarx.com\/blog\/surprise-when-dependabot-contributes-malicious-code\/\" target=\"_blank\">avis r\u00e9cent<\/a> par la soci\u00e9t\u00e9 de s\u00e9curit\u00e9 Checkmarx met en lumi\u00e8re un incident pr\u00e9occupant.  Des acteurs malveillants ont r\u00e9cemment tent\u00e9 d&#8217;exploiter la confiance associ\u00e9e \u00e0 Dependabot en se faisant passer pour l&#8217;outil.  En imitant les suggestions faites par Dependabot (sous forme de pull request), ces acteurs ont tent\u00e9 de tromper les d\u00e9veloppeurs pour qu&#8217;ils acceptent les changements sans y r\u00e9fl\u00e9chir \u00e0 deux fois.<\/p>\n<p>Bien que Dependabot illustre les progr\u00e8s r\u00e9alis\u00e9s dans l&#8217;automatisation des t\u00e2ches de maintenance logicielle, cet incident souligne \u00e9galement les complexit\u00e9s et les vuln\u00e9rabilit\u00e9s plus larges inh\u00e9rentes aux pipelines CI\/CD.  Ces pipelines servent de conduits essentiels, reliant le monde externe des outils et plates-formes de d\u00e9veloppement de logiciels aux processus internes de cr\u00e9ation et de d\u00e9ploiement de logiciels.  Comprendre ce lien est essentiel pour relever les d\u00e9fis de s\u00e9curit\u00e9 auxquels nous sommes confront\u00e9s.<\/p>\n<h2 style=\"text-align: left;\">Pipelines CI\/CD\u00a0: connecter le monde ext\u00e9rieur au monde interne<\/h2>\n<p>Les workflows d&#8217;int\u00e9gration continue (CI) et de d\u00e9ploiement (CD) ont r\u00e9volutionn\u00e9 le processus de d\u00e9veloppement logiciel, offrant aux d\u00e9veloppeurs la possibilit\u00e9 de fusionner en toute transparence leur travail et de le d\u00e9ployer dans l&#8217;environnement de production.  Ces flux de travail garantissent que le code est soumis \u00e0 des analyses de s\u00e9curit\u00e9 automatis\u00e9es, \u00e0 des tests rigoureux et au respect des normes de codage, ce qui se traduit par un processus de d\u00e9veloppement plus efficace et plus fiable.  Ils sont devenus un catalyseur d\u2019innovation, permettant aux \u00e9quipes de se concentrer sur la construction et l\u2019am\u00e9lioration de leurs produits avec l\u2019assurance de qualit\u00e9 et de s\u00e9curit\u00e9.<\/p>\n<p>Pour illustrer le concept, imaginez construire un puzzle.  CI agit comme un v\u00e9rificateur vigilant, v\u00e9rifiant que chaque nouvelle pi\u00e8ce du puzzle s&#8217;ajuste correctement avant d&#8217;avancer.  D&#8217;un autre c\u00f4t\u00e9, CD va encore plus loin en pla\u00e7ant automatiquement chaque pi\u00e8ce v\u00e9rifi\u00e9e dans le puzzle final, \u00e9liminant ainsi le besoin d&#8217;attendre que l&#8217;ensemble du puzzle soit termin\u00e9.  Ce processus acc\u00e9l\u00e9r\u00e9 permet une livraison plus rapide des fonctionnalit\u00e9s et, en fin de compte, acc\u00e9l\u00e8re le calendrier global de d\u00e9veloppement du produit.<\/p>\n<p>Cependant, ces flux de travail CI\/CD connectent \u00e9galement le monde ext\u00e9rieur \u00e0 l&#8217;environnement de d\u00e9veloppement interne, cr\u00e9ant ainsi des risques potentiels.  Par exemple, consid\u00e9rons un sc\u00e9nario dans lequel un d\u00e9veloppeur int\u00e8gre une biblioth\u00e8que tierce dans son projet via un pipeline CI\/CD.  Si le d\u00e9veloppeur ne v\u00e9rifie pas minutieusement la biblioth\u00e8que ou si le pipeline ne dispose pas de contr\u00f4les de s\u00e9curit\u00e9 appropri\u00e9s, un code malveillant pourrait \u00eatre incorpor\u00e9 sans le savoir dans le projet, compromettant ainsi son int\u00e9grit\u00e9.  Ces derni\u00e8res ann\u00e9es, on a assist\u00e9 \u00e0 une multiplication d&#8217;attaques telles que <a rel=\"nofollow noopener\" href=\"https:\/\/blog.gitguardian.com\/protecting-your-software-supply-chain-understanding-typosquatting-and-dependency-confusion-attacks\/\" target=\"_blank\">typosquatting et confusion des d\u00e9pendances<\/a>qui visent \u00e0 exploiter le recours aux logiciels open source \u00e0 des fins financi\u00e8res.<\/p>\n<p>L&#8217;essor des flux de travail d&#8217;int\u00e9gration automatis\u00e9s a modifi\u00e9 la situation \u00e9conomique des attaquants en r\u00e9duisant les co\u00fbts et en augmentant les gains potentiels d&#8217;une attaque.  Les attaquants peuvent cibler des r\u00e9f\u00e9rentiels de packages centraux populaires comme PyPi, qui h\u00e9berge des milliers de packages et effectue des millions de t\u00e9l\u00e9chargements quotidiennement.  L\u2019ampleur des op\u00e9rations rend \u00e9conomiquement viable pour les attaquants de tenter leur chance, m\u00eame avec de faibles chances de succ\u00e8s. <\/p>\n<p>Un autre exemple est l&#8217;utilisation d&#8217;API externes dans les pipelines CI\/CD.  Les d\u00e9veloppeurs doivent souvent fournir des informations d&#8217;identification valides pour ces API afin de permettre un d\u00e9ploiement automatis\u00e9 ou une int\u00e9gration avec des services externes.  Toutefois, si ces informations d&#8217;identification ne sont pas g\u00e9r\u00e9es de mani\u00e8re s\u00e9curis\u00e9e ou si elles sont expos\u00e9es par inadvertance dans des journaux ou des artefacts, <a rel=\"nofollow noopener\" href=\"https:\/\/blog.gitguardian.com\/codecov-supply-chain-breach\/\" target=\"_blank\">ils peuvent \u00eatre exploit\u00e9s par des attaquants<\/a> pour obtenir un acc\u00e8s non autoris\u00e9 \u00e0 des ressources sensibles ou manipuler le comportement du pipeline.<\/p>\n<p>Les violations CI\/CD proviennent souvent soit d&#8217;une compromission initiale de secrets, soit de d\u00e9veloppeurs devenus la cible d&#8217;attaques sp\u00e9cifiques.  Cependant, plut\u00f4t que de bl\u00e2mer les d\u00e9veloppeurs pour ces violations, il est crucial de reconna\u00eetre que le probl\u00e8me r\u00e9side dans le manque de s\u00e9curit\u00e9 inh\u00e9rent \u00e0 ces pipelines.  Cela met en \u00e9vidence un probl\u00e8me plus vaste : les pipelines CI\/CD sont loin d\u2019\u00eatre s\u00e9curis\u00e9s par d\u00e9faut.<\/p>\n<h2 style=\"text-align: left;\">Le probl\u00e8me\u00a0: les pipelines CI\/CD sont loin d\u2019\u00eatre s\u00e9curis\u00e9s par d\u00e9faut<\/h2>\n<p>Bien que l\u2019id\u00e9e de mettre en \u0153uvre des flux de travail s\u00e9curis\u00e9s d\u00e8s la conception soit de plus en plus populaire, les plateformes CI\/CD ont encore un long chemin \u00e0 parcourir.  Des plates-formes telles que GitHub Actions, GitLab CI\/CD et CircleCI, qui ont \u00e9t\u00e9 initialement con\u00e7ues dans un souci de flexibilit\u00e9, donnent souvent la priorit\u00e9 \u00e0 la facilit\u00e9 d&#8217;utilisation plut\u00f4t qu&#8217;\u00e0 des mesures de s\u00e9curit\u00e9 robustes.  En cons\u00e9quence, il existe un manque de garanties par d\u00e9faut pour emp\u00eacher que des probl\u00e8mes potentiels ne surviennent. <\/p>\n<p>Un exemple frappant de cela est la facilit\u00e9 avec laquelle un d\u00e9veloppeur expose des informations sensibles telles que des secrets.  Les d\u00e9veloppeurs injectent g\u00e9n\u00e9ralement des secrets au moment de l&#8217;ex\u00e9cution et s&#8217;appuient pour cela sur la capacit\u00e9 de stocker des secrets dans le fournisseur CI lui-m\u00eame.  Bien que cette pratique ne soit pas un probl\u00e8me en soi, elle soul\u00e8ve au moins deux probl\u00e8mes de s\u00e9curit\u00e9 : premi\u00e8rement, le fournisseur de CI h\u00e9bergeant les secrets devient un coffre-fort d&#8217;informations sensibles et une cible attrayante pour les attaquants.  Pas plus tard qu\u2019au d\u00e9but de 2023, <a rel=\"nofollow noopener\" href=\"https:\/\/blog.gitguardian.com\/how-to-secure-your-ci-cd-pipeline\/\" target=\"_blank\">CircleCI a subi une violation de ses syst\u00e8mes qui <\/a>a forc\u00e9 les utilisateurs \u00e0 alterner \u00ab tous \u00bb leurs secrets suite \u00e0 une violation des syst\u00e8mes de l&#8217;entreprise. <\/p>\n<p>Deuxi\u00e8mement, les secrets peuvent souvent \u00eatre divulgu\u00e9s et passer inaper\u00e7us via les pipelines CI\/CD eux-m\u00eames.  Par exemple, si un secret est concat\u00e9n\u00e9 avec une autre cha\u00eene (par exemple, une URL) puis enregistr\u00e9, le m\u00e9canisme de suppression du CI ne fonctionnera pas.  Il en va de m\u00eame avec les secrets cod\u00e9s.  La cons\u00e9quence est que les journaux CI exposent souvent des secrets en clair.  De m\u00eame, c&#8217;est <a rel=\"nofollow noopener\" href=\"https:\/\/blog.gitguardian.com\/hunting-for-secrets-in-docker-hub\/\" target=\"_blank\">pas rare du tout<\/a> pour trouver des secrets cod\u00e9s en dur dans des artefacts logiciels, r\u00e9sultat d&#8217;un flux de travail d&#8217;int\u00e9gration continue mal configur\u00e9. <\/p>\n<p>Les fournisseurs CI\/CD ont d\u00e9j\u00e0 pris des mesures pour am\u00e9liorer la s\u00e9curit\u00e9, comme les contr\u00f4les de s\u00e9curit\u00e9 GitHub Dependabot.  Mais la plupart du temps, les valeurs permissives par d\u00e9faut et les mod\u00e8les d\u2019autorisation complexes restent la r\u00e8gle.  Pour prot\u00e9ger les pipelines CI\/CD et emp\u00eacher la compromission du code, les d\u00e9veloppeurs doivent prendre des mesures suppl\u00e9mentaires pour renforcer leurs pipelines contre les attaques.  Un aspect crucial est d&#8217;assurer la protection des informations d&#8217;identification des d\u00e9veloppeurs.  Une autre solution consiste \u00e0 adopter une approche proactive de la s\u00e9curit\u00e9 avec des d\u00e9clencheurs d\u2019alerte.<\/p>\n<h2 style=\"text-align: left;\">Sauvegarder le CI\/CD et la cha\u00eene d\u2019approvisionnement logicielle<\/h2>\n<p>Pour s\u00e9curiser efficacement les pipelines CI\/CD, il est crucial de les consid\u00e9rer comme des environnements hautement prioritaires, potentiellement connect\u00e9s en externe.  La cl\u00e9 est un m\u00e9lange de bonnes pratiques\u00a0:<\/p>\n<ul>\n<li><strong>Restreindre l\u2019acc\u00e8s et minimiser les privil\u00e8ges<\/strong>: Accordez l\u2019acc\u00e8s en fonction de la n\u00e9cessit\u00e9 et non de la commodit\u00e9.  Un acc\u00e8s \u00e9tendu \u00e0 tous les membres de l&#8217;\u00e9quipe DevOps augmente le risque qu&#8217;un compte compromis fournisse aux attaquants un acc\u00e8s \u00e9tendu au syst\u00e8me.  Limitez l\u2019acc\u00e8s aux contr\u00f4les, configurations ou donn\u00e9es sensibles critiques.<\/li>\n<\/ul>\n<ul>\n<li><strong>Appliquer l&#8217;authentification multifacteur (MFA)<\/strong>: Surtout, utilisez toujours l\u2019authentification multifacteur (MFA) pour vous connecter \u00e0 la plateforme CI\/CD.  MFA ajoute une couche de s\u00e9curit\u00e9 essentielle, rendant beaucoup plus difficile l\u2019acc\u00e8s des utilisateurs non autoris\u00e9s, m\u00eame s\u2019ils ont des informations d\u2019identification compromises.<\/li>\n<\/ul>\n<ul>\n<li><strong>Utiliser OpenID Connect (OIDC)<\/strong>: utilisez OIDC pour connecter en toute s\u00e9curit\u00e9 les charges de travail \u00e0 des syst\u00e8mes externes, par exemple pour le d\u00e9ploiement.  Ce protocole fournit un cadre robuste pour l&#8217;authentification et la v\u00e9rification d&#8217;identit\u00e9 entre domaines, ce qui est essentiel dans un environnement distribu\u00e9 et interconnect\u00e9.<\/li>\n<\/ul>\n<ul>\n<li><strong>Utiliser des d\u00e9pendances logicielles pr\u00e9-r\u00e9vis\u00e9es<\/strong>: Il est important de fournir aux d\u00e9veloppeurs des d\u00e9pendances logicielles s\u00fbres et pr\u00e9-r\u00e9vis\u00e9es.  Cette pratique prot\u00e8ge l&#8217;int\u00e9grit\u00e9 de la cha\u00eene d&#8217;approvisionnement et \u00e9vite aux d\u00e9veloppeurs d&#8217;avoir \u00e0 v\u00e9rifier le code de chaque package.  Cela garantit l&#8217;int\u00e9grit\u00e9 de la cha\u00eene d&#8217;approvisionnement, soulageant les d\u00e9veloppeurs de la charge de v\u00e9rifier individuellement le code de chaque package.<\/li>\n<\/ul>\n<ul>\n<li><strong>Secrets d&#8217;ex\u00e9cution s\u00e9curis\u00e9s<\/strong>: Le stockage en toute s\u00e9curit\u00e9 des secrets tels que les cl\u00e9s API et les informations d&#8217;identification dans la plate-forme CI\/CD n\u00e9cessite des mesures de s\u00e9curit\u00e9 strictes, telles que l&#8217;authentification MFA renforc\u00e9e et les contr\u00f4les d&#8217;acc\u00e8s bas\u00e9s sur les r\u00f4les (RBAC).  Toutefois, ces mesures ne sont pas infaillibles. <a rel=\"nofollow noopener\" href=\"https:\/\/www.gitguardian.com\/files\/the-state-of-secrets-sprawl-report-2023\" target=\"_blank\">Les secrets sont divulgu\u00e9s par nature<\/a>et des niveaux de s\u00e9curit\u00e9 suppl\u00e9mentaires, comme une hygi\u00e8ne rigoureuse des informations d&#8217;identification et une surveillance vigilante des menaces internes et externes, sont n\u00e9cessaires pour une protection compl\u00e8te.<\/li>\n<\/ul>\n<ul>\n<li><strong>Mettre en \u0153uvre des syst\u00e8mes de d\u00e9fense avanc\u00e9s<\/strong>: Int\u00e9grez des syst\u00e8mes d\u2019alerte dans votre cadre de s\u00e9curit\u00e9.  Bien que les pots de miel soient efficaces mais difficiles \u00e0 mettre \u00e0 l&#8217;\u00e9chelle, <a rel=\"nofollow noopener\" href=\"https:\/\/www.gitguardian.com\/honeytoken\" target=\"_blank\">jetons de miel<\/a> offrir une alternative \u00e9volutive et facile \u00e0 mettre en \u0153uvre.  Ces jetons, n\u00e9cessitant une configuration minimale, peuvent am\u00e9liorer consid\u00e9rablement la s\u00e9curit\u00e9 des entreprises de toutes tailles sur diverses plates-formes telles que les syst\u00e8mes SCM, les pipelines CI\/CD et les registres d&#8217;artefacts logiciels.<\/li>\n<\/ul>\n<ul>\n<li><strong>Tirer parti des solutions \u00e0 l\u2019\u00e9chelle de l\u2019entreprise<\/strong>: Des solutions comme <a rel=\"nofollow noopener\" href=\"https:\/\/www.gitguardian.com\/\" target=\"_blank\">Plateforme GitGuardian<\/a> offrent un panneau de contr\u00f4le unique pour surveiller les incidents tels que les fuites de secrets, les erreurs de configuration de l&#8217;infrastructure en tant que code et les d\u00e9clencheurs de jetons de miel, permettant aux organisations de d\u00e9tecter, corriger et pr\u00e9venir les incidents CI\/CD \u00e0 grande \u00e9chelle.  Cela att\u00e9nue consid\u00e9rablement l\u2019impact des violations potentielles de donn\u00e9es.<\/li>\n<\/ul>\n<p>En combinant ces strat\u00e9gies, les organisations peuvent prot\u00e9ger compl\u00e8tement leurs pipelines CI\/CD et leur cha\u00eene d&#8217;approvisionnement en logiciels, en s&#8217;adaptant \u00e0 l&#8217;\u00e9volution des menaces et en maintenant des protocoles de s\u00e9curit\u00e9 robustes.  Commencez d\u00e8s aujourd&#8217;hui \u00e0 s\u00e9curiser vos pipelines avec le <a rel=\"nofollow noopener\" href=\"https:\/\/dashboard.gitguardian.com\/auth\/signup?utm_source=thn\" target=\"_blank\">Plateforme GitGuardian<\/a>.<\/p>\n<p><\/p>\n<div class=\"cf note-b\">Vous avez trouv\u00e9 cet article int\u00e9ressant ?  Suivez-nous sur <a rel=\"nofollow noopener\" href=\"https:\/\/twitter.com\/thehackersnews\" target=\"_blank\">Twitter <i class=\"icon-font icon-twitter\">\uf099<\/i><\/a>  et <a rel=\"nofollow noopener\" href=\"https:\/\/www.linkedin.com\/company\/thehackernews\/\" target=\"_blank\">LinkedIn<\/a> pour lire plus de contenu exclusif que nous publions.<\/div>\n<\/div>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><br \/>\n<br \/><br \/>\n<br \/><a href=\"https:\/\/thehackernews.com\/2023\/11\/cicd-risks-protecting-your-software.html\" rel=\"nofollow noopener\" target=\"_blank\">ttn-fr-57<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avez-vous entendu parler de Dependabot ? Sinon, demandez \u00e0 n&#8217;importe quel d\u00e9veloppeur autour de vous, et il sera probablement ravi de la fa\u00e7on dont cela a r\u00e9volutionn\u00e9 la t\u00e2che fastidieuse de v\u00e9rification et de mise \u00e0 jour des d\u00e9pendances obsol\u00e8tes dans les projets logiciels. Dependabot s&#8217;occupe non seulement des v\u00e9rifications \u00e0 votre place, mais propose [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1016540,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[200292,214797,4168,4165,4161,200267,1195,4159,4171,6816,200271,200268,200269,200270,67684,2169,3979,128318,4172,4169,4166,690,4164],"class_list":["post-1016539","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie","tag-actualites-sur-la-cybersecurite","tag-cicd","tag-comment-pirater","tag-cyber-attaques","tag-cyber-mises-a-jour","tag-cyberactualites","tag-developpement","tag-lactualite-de-la-cybersecurite-aujourdhui","tag-lactualite-des-hackers","tag-logiciel","tag-logiciel-malveillant-rancongiciel","tag-mises-a-jour-sur-la-cybersecurite","tag-nouvelles-des-pirates","tag-nouvelles-sur-le-piratage","tag-pipelines","tag-proteger","tag-risques","tag-securite-des-informations","tag-securite-informatique","tag-securite-internet","tag-violation-de-donnees","tag-vos","tag-vulnerabilite-logicielle"],"_links":{"self":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/posts\/1016539","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/comments?post=1016539"}],"version-history":[{"count":0,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/posts\/1016539\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/media\/1016540"}],"wp:attachment":[{"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/media?parent=1016539"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/categories?post=1016539"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/teknomers.com\/fr\/wp-json\/wp\/v2\/tags?post=1016539"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}