Source: nss
Severity: important
Tags: patch
Hi Mike,
Please enabled hardened build flags through dpkg-buildflags.
Patches attached:
nss-harden.patch - Enables hardened build flags
nss-harden2.patch - Patch for NSS buildsystem to source LDFLAGS
nss-format.patch, nss-format2.patch, nss-format3.patch - missing
format strings exposed by "-Wformat -Wformat-security
-Werror=format-security"
There's still one deficiency, though: relro applies to the
binaries from libnss3-tools, e.g.
jmm@pisco:~/scratch$ hardening-check /usr/bin/signtool
/usr/bin/signtool:
Position Independent Executable: no, normal executable!
Stack protected: yes
Fortify Source functions: yes (some protected functions found)
Read-only relocations: yes
Immediate binding: no not found!
It's not enabled for the NSS libs, though:
jmm@pisco:~/deb/secure-testing/hardening$ hardening-check
/usr/lib/x86_64-linux-gnu/libnss3.so
/usr/lib/x86_64-linux-gnu/libnss3.so:
Position Independent Executable: no, regular shared library (ignored)
Stack protected: yes
Fortify Source functions: yes (some protected functions found)
Read-only relocations: no, not found!
Immediate binding: no not found!
Cheers,
Moritz
diff -aur nss-3.13.1.with.ckbi.1.88.harden/debian/rules nss-3.13.1.with.ckbi.1.88/debian/rules
--- nss-3.13.1.with.ckbi.1.88.harden/debian/rules 2011-11-05 16:56:10.000000000 +0100
+++ nss-3.13.1.with.ckbi.1.88/debian/rules 2012-01-24 22:10:38.000000000 +0100
@@ -21,15 +21,12 @@
USE_64 :=
endif
-CFLAGS := -Wall -pipe
+CFLAGS = `dpkg-buildflags --get CFLAGS`
+CFLAGS += -Wall -pipe
+CFLAGS += `dpkg-buildflags --get CPPFLAGS`
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -Os
-endif
-
-CFLAGS += -g
+LDFLAGS = `dpkg-buildflags --get LDFLAGS`
+export LDFLAGS
DISTDIR := $(CURDIR)/mozilla/dist
Nur in nss-3.13.1.with.ckbi.1.88/debian: rules~.
diff -aur nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/coreconf/Linux.mk nss-3.13.1.with.ckbi.1.88/mozilla/security/coreconf/Linux.mk
--- nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/coreconf/Linux.mk 2012-01-24 22:13:26.000000000 +0100
+++ nss-3.13.1.with.ckbi.1.88/mozilla/security/coreconf/Linux.mk 2012-01-24 23:32:30.000000000 +0100
@@ -159,6 +159,7 @@
# we don't use -z defs there.
ZDEFS_FLAG = -Wl,-z,defs
DSO_LDOPTS += $(if $(findstring 2.11.90.0.8,$(shell ld -v)),,$(ZDEFS_FLAG))
+LDFLAGS = `dpkg-buildflags --get LDFLAGS`
LDFLAGS += $(ARCHFLAG)
# On Maemo, we need to use the -rpath-link flag for even the standard system
Nur in nss-3.13.1.with.ckbi.1.88/mozilla/security/coreconf: Linux.mk~.
diff -aur nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/nss/cmd/certcgi/certcgi.c nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/certcgi/certcgi.c
--- nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/nss/cmd/certcgi/certcgi.c 2008-02-16 02:17:40.000000000 +0100
+++ nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/certcgi/certcgi.c 2012-01-24 22:14:02.000000000 +0100
@@ -97,7 +97,7 @@
error_out(char *error_string)
{
printf("Content-type: text/plain\n\n");
- printf(error_string);
+ printf("%s", error_string);
fflush(stderr);
fflush(stdout);
exit(1);
Nur in nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/certcgi: certcgi.c~.
diff -aur nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/nss/cmd/digest/digest.c nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/digest/digest.c
--- nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/nss/cmd/digest/digest.c 2004-10-07 06:13:50.000000000 +0200
+++ nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/digest/digest.c 2012-01-24 22:16:23.000000000 +0100
@@ -105,7 +105,7 @@
"-t type");
fprintf(stderr, "%-20s ", "");
for (htype = HASH_AlgNULL + 1; htype < HASH_AlgTOTAL; htype++) {
- fprintf(stderr, HashTypeToOID(htype)->desc);
+ fprintf(stderr, "%s", HashTypeToOID(htype)->desc);
if (htype == (HASH_AlgTOTAL - 2))
fprintf(stderr, " or ");
else if (htype != (HASH_AlgTOTAL - 1))
Nur in nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/digest: digest.c~.
diff -aur nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/nss/cmd/signver/pk7print.c nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/signver/pk7print.c
--- nss-3.13.1.with.ckbi.1.88.harden/mozilla/security/nss/cmd/signver/pk7print.c 2008-10-07 01:37:54.000000000 +0200
+++ nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/signver/pk7print.c 2012-01-24 23:18:11.000000000 +0100
@@ -79,7 +79,7 @@
{
unsigned i;
- if (m) fprintf(out, m);
+ if (m) fprintf(out, "%s", m);
for (i = 0; i < data->len; i++) {
if (i < data->len - 1) {
@@ -136,10 +136,10 @@
{
int rv;
- fprintf(out, m);
+ fprintf(out, "%s", m);
rv = sv_PrintTime(out, &v->notBefore, "notBefore=");
if (rv) return rv;
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintTime(out, &v->notAfter, "notAfter=");
return rv;
}
@@ -181,7 +181,7 @@
int i;
char om[100];
- fprintf(out, m);
+ fprintf(out, "%s", m);
/*
* XXX Make this smarter; look at the type field and then decode
@@ -278,16 +278,16 @@
SEC_PKCS7Attribute *attr;
int iv;
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &(info->version), "version=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintName(out, &(info->issuerAndSN->issuer), "issuerName=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &(info->issuerAndSN->serialNumber),
"serialNumber=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintAlgorithmID(out, &(info->digestAlg), "digestAlgorithm=");
if (info->authAttr != NULL) {
@@ -304,9 +304,9 @@
}
/* Parse and display signature */
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintAlgorithmID(out, &(info->digestEncAlg), "digestEncryptionAlgorithm=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintAsHex(out, &(info->encDigest), "encryptedDigest=");
if (info->unAuthAttr != NULL) {
@@ -326,22 +326,22 @@
void
sv_PrintRSAPublicKey(FILE *out, SECKEYPublicKey *pk, char *m)
{
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &pk->u.rsa.modulus, "modulus=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &pk->u.rsa.publicExponent, "exponent=");
}
void
sv_PrintDSAPublicKey(FILE *out, SECKEYPublicKey *pk, char *m)
{
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &pk->u.dsa.params.prime, "prime=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &pk->u.dsa.params.subPrime, "subprime=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &pk->u.dsa.params.base, "base=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintInteger(out, &pk->u.dsa.publicValue, "publicValue=");
}
@@ -432,7 +432,7 @@
oidTag = SECOID_FindOIDTag (&((*extensions)->id));
- fprintf(out, msg);
+ fprintf(out, "%s", msg);
tmpitem = &((*extensions)->value);
if (oidTag == SEC_OID_X509_INVALID_DATE)
sv_PrintInvalidDateExten (out, tmpitem,"invalidExt");
@@ -458,13 +458,13 @@
int iv;
char om[100];
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintAlgorithmID(out, &(crl->signatureAlg), "signatureAlgorithm=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintName(out, &(crl->name), "name=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintTime(out, &(crl->lastUpdate), "lastUpdate=");
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintTime(out, &(crl->nextUpdate), "nextUpdate=");
if (crl->entries != NULL) {
@@ -563,10 +563,10 @@
}
m[PORT_Strlen(m) - 5] = 0;
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintAlgorithmID(out, &sd->signatureAlgorithm, "signatureAlgorithm=");
DER_ConvertBitString(&sd->signature);
- fprintf(out, m);
+ fprintf(out, "%s", m);
sv_PrintAsHex(out, &sd->signature, "signature=");
PORT_FreeArena(arena, PR_FALSE);
@@ -632,11 +632,11 @@
iv = 0;
while ((aCrl = src->crls[iv]) != NULL) {
sprintf(om, "signedRevocationList[%d].", iv);
- fprintf(out, om);
+ fprintf(out, "%s", om);
sv_PrintAlgorithmID(out, &aCrl->signatureWrap.signatureAlgorithm,
"signatureAlgorithm=");
DER_ConvertBitString(&aCrl->signatureWrap.signature);
- fprintf(out, om);
+ fprintf(out, "%s", om);
sv_PrintAsHex(out, &aCrl->signatureWrap.signature, "signature=");
sprintf(om, "certificateRevocationList[%d].", iv);
sv_PrintCRLInfo(out, &aCrl->crl, om);
Nur in nss-3.13.1.with.ckbi.1.88/mozilla/security/nss/cmd/signver: pk7print.c~.