[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#991421: marked as done (unblock: lemonldap-ng/2.0.11+ds-4)



Your message dated Fri, 23 Jul 2021 22:07:58 +0000
with message-id <E1m73Ko-00062Q-HC@respighi.debian.org>
and subject line unblock lemonldap-ng
has caused the Debian Bug report #991421,
regarding unblock: lemonldap-ng/2.0.11+ds-4
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
991421: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=991421
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: security@debian.org

Please unblock package lemonldap-ng

[ Reason ]
lemonldap-ng 2.0.11+ds-3 has several vulnerabilities fixed in 2.0.12.
This update fixes:
 * Session cache corruption can lead to authorization bypass or spoofing
   (Closes: CVE-2021-35472)
 * OAuth2 handler does not verify access token validity
   (Closes: CVE-2021-35473)
 * XSS on register form
 * Bad behavior which displays TOTP secret to connected user and debug logs

[ Impact ]
One high vulnerability (CVE-2021-35472) and medium others

[ Tests ]
New upstream test not imported here. Current tests passed (both build
and autopkgtest)

[ Risks ]
Low risk. lemonldap-ng is developed following BDD/TDD, so most features
are tested.

[ Checklist ]
  [X] all changes are documented in the d/changelog
  [X] I reviewed all changes and I approve them
  [X] attach debdiff against the package in testing

[ Other info ]
(Anything else the release team should know.)

unblock lemonldap-ng/2.0.11+ds-4
diff --git a/debian/changelog b/debian/changelog
index d3c338880..a56d54279 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+lemonldap-ng (2.0.11+ds-4) unstable; urgency=high
+
+  * Import security fixes from 2.0.12
+    * Session cache corruption can lead to authorization bypass or spoofing
+      (Closes: CVE-2021-35472)
+    * OAuth2 handler does not verify access token validity
+      (Closes: CVE-2021-35473)
+    * Fix XSS on register form
+    * Don't display TOTP secret to connected user, neither in logs
+
+ -- Yadd <yadd@debian.org>  Thu, 22 Jul 2021 22:13:38 +0200
+
 lemonldap-ng (2.0.11+ds-3) unstable; urgency=medium
 
   * Add Breaks+Replaces in lemonldap-ng-handler for
diff --git a/debian/patches/CVE-2021-35472.patch b/debian/patches/CVE-2021-35472.patch
new file mode 100644
index 000000000..16a4e4c10
--- /dev/null
+++ b/debian/patches/CVE-2021-35472.patch
@@ -0,0 +1,30 @@
+Description: fix session cache corruption
+Author: Yadd <yadd@debian.org>
+Origin: upstream, https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/b6a1f946
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2539
+Forwarded: not-needed
+Last-Update: 2021-06-25
+
+--- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm
++++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm
+@@ -139,7 +139,9 @@
+     }
+ 
+     # Try to recover cookie and user session
+-    if (    $id = $class->fetchId($req)
++    $id = $class->fetchId($req);
++    $class->data( {} ) unless($id);
++    if (    $id
+         and $session = $class->retrieveSession( $req, $id ) )
+     {
+ 
+--- a/lemonldap-ng-portal/t/75-2F-Registers.t
++++ b/lemonldap-ng-portal/t/75-2F-Registers.t
+@@ -439,6 +439,7 @@
+         ),
+         'Push U2F signature'
+     );
++    $id = expectCookie($res);
+     ok(
+         $res = $client->_get(
+             '/2fregisters',
diff --git a/debian/patches/CVE-2021-35473.patch b/debian/patches/CVE-2021-35473.patch
new file mode 100644
index 000000000..535252b03
--- /dev/null
+++ b/debian/patches/CVE-2021-35473.patch
@@ -0,0 +1,69 @@
+Description: Add missing access token expiration check in OAuth2 handler
+Author: Maxime Besson <maxime.besson@worteks.com>
+Origin: upstream, https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/23a8a100
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2549
+Forwarded: not-needed
+Reviewed-By: Yadd <yadd@debian.org>
+Last-Update: 2021-06-25
+
+--- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/OAuth2.pm
++++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/OAuth2.pm
+@@ -10,16 +10,17 @@
+ 
+     # Retrieve regular session if this is not an offline access token
+     unless ($offlineId) {
+-        my $data = {
+-            %{
+-                $class->Lemonldap::NG::Handler::Main::retrieveSession( $req,
+-                    $id )
+-            },
+-            $class->_getTokenAttributes($req)
+-        };
++        my $data =
++          $class->Lemonldap::NG::Handler::Main::retrieveSession( $req, $id );
++        if ( ref($data) eq "HASH" ) {
++            $data = { %{$data}, $class->_getTokenAttributes($req) };
+ 
+-        # Update cache
+-        $class->data($data);
++            # Update cache
++            $class->data($data);
++        }
++        else {
++            $req->data->{oauth2_error} = 'invalid_token';
++        }
+         return $data;
+     }
+ 
+@@ -87,6 +88,10 @@
+ 
+     # Get access token session
+     my $infos = $class->getOIDCInfos($access_token);
++    unless ($infos) {
++        $req->data->{oauth2_error} = 'invalid_token';
++        return;
++    }
+ 
+     # Store scope and rpid for future session attributes
+     if ( $infos->{rp} ) {
+@@ -141,6 +146,20 @@
+     unless ( $oidcSession->error ) {
+         $class->logger->debug("Get OIDC session $id");
+ 
++        # Verify that session is valid
++        unless ( $oidcSession->data->{_utime} ) {
++            $class->logger->error("_utime missing from Access Token session");
++            return;
++        }
++
++        my $ttl = $class->tsv->{timeout} - time + $oidcSession->data->{_utime};
++        $class->logger->debug( "Session TTL = " . $ttl );
++
++        if ( time - $oidcSession->data->{_utime} > $class->tsv->{timeout} ) {
++            $class->logger->info("Access Token session $id expired");
++            return;
++        }
++
+         $infos = { %{ $oidcSession->data } };
+     }
+     else {
diff --git a/debian/patches/dont-display-totp-secret.patch b/debian/patches/dont-display-totp-secret.patch
new file mode 100644
index 000000000..d9fd960fa
--- /dev/null
+++ b/debian/patches/dont-display-totp-secret.patch
@@ -0,0 +1,21 @@
+Description: don't display TOTP secret to connected user neither in logs
+Author: Maxime Besson
+Origin: upstream
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2543
+Forwarded: not-needed
+Reviewed-By: Yadd <yadd@debian.org>
+Last-Update: 2021-06-25
+
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Register/TOTP.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Register/TOTP.pm
+@@ -226,10 +226,6 @@
+             return $self->p->sendError( $req, 'notAuthorized', 200 );
+         }
+ 
+-        elsif ( $self->conf->{totp2fDisplayExistingSecret} ) {
+-            $self->logger->debug("User secret = $secret");
+-        }
+-
+         else {
+             return $self->p->sendError( $req, 'totpExistingKey', 200 );
+         }
diff --git a/debian/patches/fix-trusted-domain-regex.patch b/debian/patches/fix-trusted-domain-regex.patch
new file mode 100644
index 000000000..526b208db
--- /dev/null
+++ b/debian/patches/fix-trusted-domain-regex.patch
@@ -0,0 +1,46 @@
+Description: fix trusted domain regex
+Author: Yadd <yadd@debian.org>
+Origin: upstream, https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/3b8222ae8
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2535
+Forwarded: not-needed
+Last-Update: 2021-06-25
+
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm
+@@ -391,7 +391,7 @@
+             }
+         }
+ 
+-        my $tmp = 'https?://' . $re->as_string . '(?::\d+)?(?:/|$)';
++        my $tmp = '^https?://' . $re->as_string . '(?::\d+)?(?:/|$)';
+         $self->trustedDomainsRe(qr/$tmp/);
+ 
+     }
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm
+@@ -885,14 +885,14 @@
+     my $csp = $self->csp . "form-action " . $self->conf->{cspFormAction};
+     if ( my $url = $req->urldc ) {
+         $self->logger->debug("Required urldc : $url");
+-        $url =~ s#(https?://[^/]+).*#$1#;
++        $url =~ s#^(https?://[^/]+).*#$1#;
+         $self->logger->debug("Set CSP form-action with urldc : $url");
+         $csp .= " $url";
+     }
+     my $url = $args{params}->{URL};
+     if ( defined $url ) {
+         $self->logger->debug("Required Params URL : $url");
+-        if ( $url =~ s#(https?://[^/]+).*#$1# ) {
++        if ( $url =~ s#^(https?://[^/]+).*#$1# ) {
+             $self->logger->debug("Set CSP form-action with Params URL : $url");
+             $csp .= " $url";
+         }
+@@ -932,7 +932,7 @@
+     # Check if frames need to be embedded
+     my @url;
+     if ( $req->info ) {
+-        @url = map { s#https?://([^/]+).*#$1#; $_ }
++        @url = map { s#^https?://([^/]+).*#$1#; $_ }
+           ( $req->info =~ /<iframe.*?src="(.*?)"/sg );
+     }
+     if (@url) {
diff --git a/debian/patches/fix-trusted-domain-wildcard.patch b/debian/patches/fix-trusted-domain-wildcard.patch
new file mode 100644
index 000000000..e7e73fee2
--- /dev/null
+++ b/debian/patches/fix-trusted-domain-wildcard.patch
@@ -0,0 +1,53 @@
+Description: Reject hashes in URL
+Author: Yadd <yadd@debian.org>
+Origin: upstream, https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/4b20e54b
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2477
+Forwarded: not-needed
+Last-Update: 2021-06-25
+
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm
+@@ -333,6 +333,11 @@
+             "XSS attack detected (param: $name | value: $value)");
+         return $self->conf->{checkXSS};
+     }
++    if ( $value =~ m/#/ ) {
++        $self->userLogger->error(
++            "Browser parameters in URL (param: $name | value: $value)");
++        return $self->conf->{checkXSS};
++    }
+     return 0;
+ }
+ 
+--- /dev/null
++++ b/lemonldap-ng-portal/t/01-Reject-Hashes-in-URL.t
+@@ -0,0 +1,29 @@
++use Test::More;
++use strict;
++use IO::String;
++use MIME::Base64;
++
++require 't/test-lib.pm';
++
++my $res;
++
++my $client = LLNG::Manager::Test->new(
++    { ini => { logLevel => 'error', useSafeJail => 1 } } );
++
++ok(
++    $res = $client->_get(
++        '/',
++        query => 'url='
++          . encode_base64( 'http://bad.com#test.example.llng', '' )
++    ),
++    'Try http://bad.com#test.example.llng'
++);
++expectReject($res);
++ok( $res->[2]->[0] =~ /37/, 'Rejected with PE_BADURL' )
++  or print STDERR Dumper( $res->[2]->[0] );
++
++count(2);
++
++clean_sessions();
++
++done_testing( count() );
diff --git a/debian/patches/fix-xss-on-register-form.patch b/debian/patches/fix-xss-on-register-form.patch
new file mode 100644
index 000000000..60fc9eaee
--- /dev/null
+++ b/debian/patches/fix-xss-on-register-form.patch
@@ -0,0 +1,400 @@
+Description: fix XSS on register form
+Author: Maxime Besson <maxime.besson@worteks.com>
+Origin: upstream, https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/d6968535
+ https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/commit/297dc830a
+Bug: https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/issues/2495
+Forwarded: not-needed
+Reviewed-By: Yadd <yadd@debian.org>
+Last-Update: 2021-06-25
+
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Mail2F.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/2F/Mail2F.pm
+@@ -82,8 +82,6 @@
+     }
+ 
+     # Build mail content
+-    my %tplPrms;
+-    $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+     my $tr      = $self->translate($req);
+     my $subject = $self->conf->{mail2fSubject};
+ 
+@@ -104,12 +102,16 @@
+             $req,
+             'mail_2fcode',
+             filter => $tr,
+-            params => \%tplPrms
++            params => {
++                code => $code,
++            },
+         );
+         $html = 1;
+     }
+ 
+     # Replace variables in body
++    # FIXME: kept for compatibility with 2.0.0 mail templates
++    # in future versions this should only happen for plaintext emails
+     $body =~ s/\$code/$code/g;
+     $body =~ s/\$(\w+)/$req->{sessionInfo}->{$1} || ''/ge;
+ 
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/SMTP.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/SMTP.pm
+@@ -49,6 +49,7 @@
+     # HTML::Template cache interferes with email translation (#1897)
+     $prm{cache} = 0 unless defined $prm{cache};
+     $prm{params}->{STATIC_PREFIX} = $self->p->staticPrefix;
++    $prm{params}->{MAIN_LOGO}     = $self->conf->{portalMainLogo};
+     my %extra =
+         $self->p->can('tplParams')
+       ? $self->p->tplParams($req)
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/CertificateResetByMail.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/CertificateResetByMail.pm
+@@ -129,7 +129,7 @@
+ 
+ sub _certificateReset {
+     my ( $self, $req ) = @_;
+-    my ( $mailToken, %tplPrms );
++    my ($mailToken);
+ 
+     # CertificatReset FORM => modifyCertificate()
+     if ( $req->method =~ /^POST$/i
+@@ -359,7 +359,6 @@
+           );
+ 
+         # Build mail content
+-        $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+         my $tr      = $self->translate($req);
+         my $subject = $self->conf->{certificateResetByMailStep1Subject};
+         unless ($subject) {
+@@ -380,12 +379,18 @@
+                 $req,
+                 'mail_certificateConfirm',
+                 filter => $tr,
+-                params => \%tplPrms
++                params => {
++                    expMailDate => $req->data->{expMailDate},
++                    expMailTime => $req->data->{expMailTime},
++                    url         => $url,
++                },
+             );
+             $html = 1;
+         }
+ 
+         # Replace variables in body
++        # FIXME: kept for compatibility with 2.0.0 mail templates
++        # in future versions this should only happen for plaintext emails
+         $body =~ s/\$expMailDate/$req->data->{expMailDate}/ge;
+         $body =~ s/\$expMailTime/$req->data->{expMailTime}/ge;
+         $body =~ s/\$url/$url/g;
+@@ -420,7 +425,6 @@
+ 
+ sub modifyCertificate {
+     my ( $self, $req ) = @_;
+-    my %tplPrms;
+     my $nbio;
+     my $x509;
+     my $notAfter;
+@@ -539,7 +543,6 @@
+         $req->{sessionInfo}->{ $self->conf->{mailSessionKey} } );
+ 
+     # Build mail content
+-    $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+     my $tr      = $self->translate($req);
+     my $subject = $self->conf->{certificateResetByMailStep2Subject};
+     unless ($subject) {
+@@ -560,12 +563,14 @@
+             $req,
+             'mail_certificateReset',
+             filter => $tr,
+-            params => \%tplPrms
++            params => {},
+         );
+         $html = 1;
+     }
+ 
+     # Replace variables in body
++    # FIXME: kept for compatibility with 2.0.0 mail templates
++    # in future versions this should only happen for plaintext emails
+     $body =~ s/\$(\w+)/$req->{sessionInfo}->{$1} || ''/ge;
+ 
+     # Send mail
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/MailPasswordReset.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/MailPasswordReset.pm
+@@ -91,7 +91,7 @@
+ 
+ sub _reset {
+     my ( $self, $req ) = @_;
+-    my ( $mailToken, %tplPrms );
++    my ($mailToken);
+ 
+     # PASSWORD CHANGE FORM => changePwd()
+     if (
+@@ -323,7 +323,6 @@
+           );
+ 
+         # Build mail content
+-        $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+         my $tr      = $self->translate($req);
+         my $subject = $self->conf->{mailConfirmSubject};
+         unless ($subject) {
+@@ -344,12 +343,18 @@
+                 $req,
+                 'mail_confirm',
+                 filter => $tr,
+-                params => \%tplPrms
++                params => {
++                    expMailDate => $req->data->{expMailDate},
++                    expMailTime => $req->data->{expMailTime},
++                    url         => $url,
++                },
+             );
+             $html = 1;
+         }
+ 
+         # Replace variables in body
++        # FIXME: kept for compatibility with 2.0.0 mail templates
++        # in future versions this should only happen for plaintext emails
+         $body =~ s/\$expMailDate/$req->data->{expMailDate}/ge;
+         $body =~ s/\$expMailTime/$req->data->{expMailTime}/ge;
+         $body =~ s/\$url/$url/g;
+@@ -496,7 +501,6 @@
+         $req->{sessionInfo}->{ $self->conf->{mailSessionKey} } );
+ 
+     # Build mail content
+-    $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+     my $tr      = $self->translate($req);
+     my $subject = $self->conf->{mailSubject};
+     unless ($subject) {
+@@ -505,6 +509,8 @@
+     }
+     my $body;
+     my $html;
++    my $password = $req->data->{newpassword};
++
+     if ( $self->conf->{mailBody} ) {
+ 
+         # We use a specific text message, no html
+@@ -517,13 +523,16 @@
+             $req,
+             'mail_password',
+             filter => $tr,
+-            params => \%tplPrms
++            params => {
++                %tplPrms, password => $password,
++            },
+         );
+         $html = 1;
+     }
+ 
+     # Replace variables in body
+-    my $password = $req->data->{newpassword};
++    # FIXME: kept for compatibility with 2.0.0 mail templates
++    # in future versions this should only happen for plaintext emails
+     $body =~ s/\$password/$password/g;
+     $body =~ s/\$(\w+)/$req->{sessionInfo}->{$1} || ''/ge;
+ 
+--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/Register.pm
++++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/Register.pm
+@@ -114,7 +114,6 @@
+ # Parameters check
+ sub _register {
+     my ( $self, $req ) = @_;
+-    my %tplPrms;
+ 
+     # Check if it's a first access
+     unless ( ( $req->method =~ /^POST$/i and $req->param('mail') )
+@@ -301,7 +300,6 @@
+           );
+ 
+         # Build mail content
+-        $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+         my $tr      = $self->translate($req);
+         my $subject = $self->conf->{registerConfirmSubject};
+         unless ($subject) {
+@@ -316,10 +314,17 @@
+             $req,
+             'mail_register_confirm',
+             filter => $tr,
+-            params => \%tplPrms
++            params => {
++                expMailDate => $req->data->{expMailDate},
++                expMailTime => $req->data->{expMailTime},
++                url         => $url,
++                %{ $req->data->{registerInfo} || {} },
++            },
+         );
+ 
+         # Replace variables in body
++        # FIXME: kept for compatibility with 2.0.0 mail templates
++        # in future versions this should only happen for plaintext emails
+         $body =~ s/\$expMailDate/$req->data->{expMailDate}/g;
+         $body =~ s/\$expMailTime/$req->data->{expMailTime}/g;
+         $body =~ s/\$url/$url/g;
+@@ -361,7 +366,6 @@
+     }
+ 
+     # Build mail content
+-    $tplPrms{MAIN_LOGO} = $self->conf->{portalMainLogo};
+     my $tr      = $self->translate($req);
+     my $subject = $self->conf->{registerDoneSubject};
+     unless ($subject) {
+@@ -371,14 +375,6 @@
+     my $body;
+     my $html = 1;
+ 
+-    # Use HTML template
+-    $body = $self->loadMailTemplate(
+-        $req,
+-        'mail_register_done',
+-        filter => $tr,
+-        params => \%tplPrms
+-    );
+-
+     # Build portal url
+     my $url = $self->conf->{portal};
+     $url =~ s#/*$##;
+@@ -390,7 +386,20 @@
+         ( $req_url ? ( url => $req_url ) : () ),
+       );
+ 
++    # Use HTML template
++    $body = $self->loadMailTemplate(
++        $req,
++        'mail_register_done',
++        filter => $tr,
++        params => {
++            url => $url,
++            %{ $req->data->{registerInfo} || {} },
++        },
++    );
++
+     # Replace variables in body
++    # FIXME: kept for compatibility with 2.0.0 mail templates
++    # in future versions this should only happen for plaintext emails
+     $body =~ s/\$url/$url/g;
+     $body =~ s/\$(\w+)/$req->data->{registerInfo}->{$1}/ge;
+ 
+--- a/lemonldap-ng-portal/site/templates/common/mail_2fcode.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_2fcode.tpl
+@@ -1,10 +1,10 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <span>
+-<span trspan="hello">Hello</span> $cn,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="session_cn" ESCAPE=HTML>,<br />
+ <br />
+ <span trspan="yourLoginCodeIs">Your login code is</span>
+-<b>$code</b><br/>
++<b><TMPL_VAR NAME="code" ESCAPE=HTML></b><br/>
+ </span>
+ 
+ <TMPL_INCLUDE NAME="mail_footer.tpl">
+--- a/lemonldap-ng-portal/site/templates/common/mail_certificateConfirm.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_certificateConfirm.tpl
+@@ -1,10 +1,10 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <p>
+-<span trspan="hello">Hello</span> $cn,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="session_cn" ESCAPE=HTML>,<br />
+ <br />
+ <span><img src="cid:arrow:../common/bullet_go.png" alt="go"/></span>
+-<a href="$url" style="text-decoration:none;color:orange;">
++<a href="<TMPL_VAR NAME="url" ESCAPE=HTML>" style="text-decoration:none;color:orange;">
+ <span trspan="click2ResetCertificate">Click here to reset your certificate</span>
+ </a>
+ </p>
+--- a/lemonldap-ng-portal/site/templates/common/mail_certificateReset.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_certificateReset.tpl
+@@ -1,7 +1,7 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <p>
+-<span trspan="hello">Hello</span> $cn,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="session_cn" ESCAPE=HTML>,<br />
+ <br />
+ <span trspan="resetCertificateOK">Your certificate has been successfully reset!</span> 
+ </p>
+--- a/lemonldap-ng-portal/site/templates/common/mail_confirm.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_confirm.tpl
+@@ -1,10 +1,10 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <p>
+-<span trspan="hello">Hello</span> $cn,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="session_cn" ESCAPE=HTML>,<br />
+ <br />
+ <span><img src="cid:arrow:../common/bullet_go.png" alt="go"/></span>
+-<a href="$url" style="text-decoration:none;color:orange;">
++<a href="<TMPL_VAR NAME="url" ESCAPE=HTML>" style="text-decoration:none;color:orange;">
+ <span trspan="click2Reset">Click here to reset your password</span>
+ </a>
+ </p>
+--- a/lemonldap-ng-portal/site/templates/common/mail_footer.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_footer.tpl
+@@ -4,7 +4,7 @@
+ <p>
+ <span trspan="autoMail">This mail was sent automatically</span><br />
+ <span trspan="requestIssuedFromIP">The request was issued from IP</span>
+-$ipAddr
++<TMPL_VAR NAME="session_ipAddr" ESCAPE=HTML>
+ </p>
+ </div>
+ 
+--- a/lemonldap-ng-portal/site/templates/common/mail_password.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_password.tpl
+@@ -1,12 +1,12 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <p>
+-<span trspan="hello">Hello</span> $cn,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="session_cn" ESCAPE=HTML>,<br />
+ <br />
+ <TMPL_IF NAME="RESET">
+ <span trspan="newPwdIs">Your new password is</span> 
+ <span><img src="cid:key:../common/key.png" alt="key"/></span>
+-<b>$password</b>
++<b><TMPL_VAR NAME="password" ESCAPE=HTML></b>
+ <TMPL_ELSE>
+ <span trspan="pwdChanged">Your password has been successfully changed!</span> 
+ </TMPL_IF>
+--- a/lemonldap-ng-portal/site/templates/common/mail_register_confirm.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_register_confirm.tpl
+@@ -1,10 +1,10 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <p>
+-<span trspan="hello">Hello</span> $firstname $lastname,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="firstname" ESCAPE=HTML> <TMPL_VAR NAME="lastname" ESCAPE=HTML>,<br />
+ <br />
+ <span><img src="cid:arrow:../common/bullet_go.png" alt="go"/></span>
+-<a href="$url" style="text-decoration:none;color:orange;">
++<a href="<TMPL_VAR NAME="url" ESCAPE=HTML>" style="text-decoration:none;color:orange;">
+ <span trspan="click2Register">Click here to confirm your account registration</span>
+ </a>
+ </p>
+--- a/lemonldap-ng-portal/site/templates/common/mail_register_done.tpl
++++ b/lemonldap-ng-portal/site/templates/common/mail_register_done.tpl
+@@ -1,19 +1,19 @@
+ <TMPL_INCLUDE NAME="mail_header.tpl">
+ 
+ <p>
+-<span trspan="hello">Hello</span> $firstname $lastname,<br />
++<span trspan="hello">Hello</span> <TMPL_VAR NAME="firstname" ESCAPE=HTML> <TMPL_VAR NAME="lastname" ESCAPE=HTML>,<br />
+ <br />
+ <span trspan="accountCreated">Your account was successfully created.</span>
+ <br /> 
+ <br /> 
+ <span trspan="yourLoginIs">Your login is</span> 
+ <span><img src="cid:key:../common/bullet_go.png" alt="go"/></span>
+-<b>$login</b>
++<b><TMPL_VAR NAME="login" ESCAPE=HTML></b>
+ <br /> 
+ <span trspan="pwdIs">Your password is</span> 
+ <span><img src="cid:key:../common/key.png" alt="key"/></span>
+-<b>$password</b>
++<b><TMPL_VAR NAME="password" ESCAPE=HTML></b>
+ </p>
+-<p><a href="$url"><span trspan="goToPortal">Click here to access to portal</span></a></p>
++<p><a href="<TMPL_VAR NAME="url" ESCAPE=HTML>"><span trspan="goToPortal">Click here to access to portal</span></a></p>
+ 
+ <TMPL_INCLUDE NAME="mail_footer.tpl">
diff --git a/debian/patches/series b/debian/patches/series
index b1a4d299e..a1245fc76 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,9 @@ javascript-path.patch
 Avoid-developer-tests.patch
 fix-for-pod2man.diff
 replace-api-doc-by-link.diff
+CVE-2021-35472.patch
+CVE-2021-35473.patch
+fix-trusted-domain-wildcard.patch
+fix-trusted-domain-regex.patch
+fix-xss-on-register-form.patch
+dont-display-totp-secret.patch

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply to: