Pier Angelo Vendrame pushed to branch tor-browser-102.8.0esr-12.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
bd011d63
by Pier Angelo Vendrame at 2023-03-10T10:39:17+01:00
-
1a81a5cc
by Pier Angelo Vendrame at 2023-03-10T10:39:17+01:00
-
fcf0e668
by Kathy Brade at 2023-03-10T10:39:17+01:00
-
6209ee94
by Kathy Brade at 2023-03-10T10:39:18+01:00
-
7e05454e
by Pier Angelo Vendrame at 2023-03-10T10:39:18+01:00
-
5f27ed12
by Pier Angelo Vendrame at 2023-03-10T10:39:19+01:00
-
7caf293f
by Pier Angelo Vendrame at 2023-03-10T10:39:19+01:00
10 changed files:
- browser/config/mozconfigs/base-browser
- browser/config/mozconfigs/tor-browser
- build/moz.configure/update-programs.configure
- modules/libmar/tool/moz.build
- modules/libmar/verify/moz.build
- toolkit/mozapps/update/UpdateService.jsm
- toolkit/mozapps/update/updater/updater-common.build
- toolkit/mozapps/update/updater/updater.cpp
- toolkit/xre/moz.build
- toolkit/xre/nsUpdateDriver.cpp
Changes:
| ... | ... | @@ -14,6 +14,10 @@ export MOZILLA_OFFICIAL=1 |
| 14 | 14 | ac_add_options --enable-optimize
|
| 15 | 15 | ac_add_options --enable-rust-simd
|
| 16 | 16 | |
| 17 | +# Bug 13379: Sign our MAR files.
|
|
| 18 | +ac_add_options --enable-verify-mar
|
|
| 19 | +ac_add_options --enable-nss-mar
|
|
| 20 | + |
|
| 17 | 21 | ac_add_options --enable-bundled-fonts
|
| 18 | 22 | |
| 19 | 23 | ac_add_options --disable-tests
|
| ... | ... | @@ -11,6 +11,5 @@ ac_add_options --with-relative-data-dir=TorBrowser/Data/Browser |
| 11 | 11 | # ac_add_options --with-user-appdir=.torproject
|
| 12 | 12 | |
| 13 | 13 | ac_add_options --enable-tor-browser-update
|
| 14 | -ac_add_options --enable-verify-mar
|
|
| 15 | 14 | |
| 16 | 15 | ac_add_options --with-distribution-id=org.torproject |
| ... | ... | @@ -32,6 +32,14 @@ set_config( |
| 32 | 32 | "MOZ_VERIFY_MAR_SIGNATURE", depends_if("--enable-verify-mar")(lambda _: True)
|
| 33 | 33 | )
|
| 34 | 34 | |
| 35 | +# Use NSS for MAR signatures even on platforms where system libraries are
|
|
| 36 | +# supported (currently Windows and macOS).
|
|
| 37 | +# ==============================================================
|
|
| 38 | + |
|
| 39 | +option("--enable-nss-mar", help="Always use NSS for MAR signatures")
|
|
| 40 | + |
|
| 41 | +set_config("MOZ_USE_NSS_FOR_MAR", True, when="--enable-nss-mar")
|
|
| 42 | + |
|
| 35 | 43 | # Maintenance service (Windows only)
|
| 36 | 44 | # ==============================================================
|
| 37 | 45 |
| ... | ... | @@ -43,7 +43,7 @@ if CONFIG["MOZ_BUILD_APP"] != "tools/update-packaging": |
| 43 | 43 | "verifymar",
|
| 44 | 44 | ]
|
| 45 | 45 | |
| 46 | - if CONFIG["TOR_BROWSER_UPDATE"]:
|
|
| 46 | + if CONFIG["MOZ_USE_NSS_FOR_MAR"]:
|
|
| 47 | 47 | DEFINES["MAR_NSS"] = True
|
| 48 | 48 | |
| 49 | 49 | if CONFIG["OS_ARCH"] == "WINNT":
|
| ... | ... | @@ -52,12 +52,12 @@ if CONFIG["MOZ_BUILD_APP"] != "tools/update-packaging": |
| 52 | 52 | OS_LIBS += [
|
| 53 | 53 | "ws2_32",
|
| 54 | 54 | ]
|
| 55 | - if not CONFIG["TOR_BROWSER_UPDATE"]:
|
|
| 55 | + if not CONFIG["MOZ_USE_NSS_FOR_MAR"]:
|
|
| 56 | 56 | OS_LIBS += [
|
| 57 | 57 | "crypt32",
|
| 58 | 58 | "advapi32",
|
| 59 | 59 | ]
|
| 60 | - elif CONFIG["OS_ARCH"] == "Darwin" and not CONFIG["TOR_BROWSER_UPDATE"]:
|
|
| 60 | + elif CONFIG["OS_ARCH"] == "Darwin" and not CONFIG["MOZ_USE_NSS_FOR_MAR"]:
|
|
| 61 | 61 | OS_LIBS += [
|
| 62 | 62 | "-framework CoreFoundation",
|
| 63 | 63 | "-framework Security",
|
| ... | ... | @@ -15,12 +15,15 @@ FORCE_STATIC_LIB = True |
| 15 | 15 | |
| 16 | 16 | if CONFIG["OS_ARCH"] == "WINNT":
|
| 17 | 17 | USE_STATIC_LIBS = True
|
| 18 | -elif CONFIG["OS_ARCH"] == "Darwin":
|
|
| 19 | - USE_LIBS += [
|
|
| 20 | - "nspr",
|
|
| 21 | - "nss",
|
|
| 22 | - "signmar",
|
|
| 18 | + use_nss = CONFIG["MOZ_USE_NSS_FOR_MAR"]
|
|
| 19 | +elif CONFIG["OS_ARCH"] == "Darwin" and not CONFIG["MOZ_USE_NSS_FOR_MAR"]:
|
|
| 20 | + UNIFIED_SOURCES += [
|
|
| 21 | + "MacVerifyCrypto.cpp",
|
|
| 23 | 22 | ]
|
| 23 | + OS_LIBS += [
|
|
| 24 | + "-framework Security",
|
|
| 25 | + ]
|
|
| 26 | + use_nss = False
|
|
| 24 | 27 | else:
|
| 25 | 28 | USE_LIBS += [
|
| 26 | 29 | "nspr",
|
| ... | ... | @@ -34,14 +37,16 @@ else: |
| 34 | 37 | OS_LIBS += [
|
| 35 | 38 | "-Wl,-rpath=\\$$ORIGIN",
|
| 36 | 39 | ]
|
| 37 | - |
|
| 38 | -DEFINES["MAR_NSS"] = True
|
|
| 39 | -LOCAL_INCLUDES += ["../sign"]
|
|
| 40 | + use_nss = True
|
|
| 40 | 41 | |
| 41 | 42 | LOCAL_INCLUDES += [
|
| 42 | 43 | "../src",
|
| 43 | 44 | ]
|
| 44 | 45 | |
| 46 | +if use_nss:
|
|
| 47 | + LOCAL_INCLUDES += ["../sign"]
|
|
| 48 | + DEFINES["MAR_NSS"] = True
|
|
| 49 | + |
|
| 45 | 50 | # C11 for static_assert
|
| 46 | 51 | c11_flags = ["-std=gnu11"]
|
| 47 | 52 | if CONFIG["CC_TYPE"] == "clang-cl":
|
| ... | ... | @@ -996,21 +996,6 @@ function LOG(string) { |
| 996 | 996 | }
|
| 997 | 997 | }
|
| 998 | 998 | |
| 999 | -/**
|
|
| 1000 | - * Convert a string containing binary values to hex.
|
|
| 1001 | - */
|
|
| 1002 | -function binaryToHex(input) {
|
|
| 1003 | - var result = "";
|
|
| 1004 | - for (var i = 0; i < input.length; ++i) {
|
|
| 1005 | - var hex = input.charCodeAt(i).toString(16);
|
|
| 1006 | - if (hex.length == 1) {
|
|
| 1007 | - hex = "0" + hex;
|
|
| 1008 | - }
|
|
| 1009 | - result += hex;
|
|
| 1010 | - }
|
|
| 1011 | - return result;
|
|
| 1012 | -}
|
|
| 1013 | - |
|
| 1014 | 999 | /**
|
| 1015 | 1000 | * Gets the specified directory at the specified hierarchy under the
|
| 1016 | 1001 | * update root directory and creates it if it doesn't exist.
|
| ... | ... | @@ -5204,7 +5189,13 @@ Downloader.prototype = { |
| 5204 | 5189 | // encoded binary (such as what is typically output by programs like
|
| 5205 | 5190 | // sha1sum). In the future, this may change to base64 depending on how
|
| 5206 | 5191 | // we choose to compute these hashes.
|
| 5207 | - digest = binaryToHex(hash.finish(false));
|
|
| 5192 | + hash = hash.finish(false);
|
|
| 5193 | + digest = Array.from(hash, (c, i) =>
|
|
| 5194 | + hash
|
|
| 5195 | + .charCodeAt(i)
|
|
| 5196 | + .toString(16)
|
|
| 5197 | + .padStart(2, "0")
|
|
| 5198 | + ).join("");
|
|
| 5208 | 5199 | } catch (e) {
|
| 5209 | 5200 | LOG(
|
| 5210 | 5201 | "Downloader:_verifyDownload - failed to compute hash of the downloaded update archive"
|
| ... | ... | @@ -4,9 +4,11 @@ |
| 4 | 4 | # License, v. 2.0. If a copy of the MPL was not distributed with this
|
| 5 | 5 | # file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
| 6 | 6 | |
| 7 | -DEFINES["MAR_NSS"] = True
|
|
| 8 | - |
|
| 9 | -link_with_nss = DEFINES["MAR_NSS"] or (CONFIG["OS_ARCH"] == "Linux" and CONFIG["MOZ_VERIFY_MAR_SIGNATURE"])
|
|
| 7 | +link_with_nss = CONFIG["MOZ_USE_NSS_FOR_MAR"] or (
|
|
| 8 | + CONFIG["OS_ARCH"] == "Linux" and CONFIG["MOZ_VERIFY_MAR_SIGNATURE"]
|
|
| 9 | +)
|
|
| 10 | +if link_with_nss:
|
|
| 11 | + DEFINES["MAR_NSS"] = True
|
|
| 10 | 12 | |
| 11 | 13 | srcs = [
|
| 12 | 14 | "archivereader.cpp",
|
| ... | ... | @@ -2809,7 +2809,8 @@ static void UpdateThreadFunc(void* param) { |
| 2809 | 2809 | if (ReadMARChannelIDs(updateSettingsPath, &MARStrings) != OK) {
|
| 2810 | 2810 | rv = UPDATE_SETTINGS_FILE_CHANNEL;
|
| 2811 | 2811 | } else {
|
| 2812 | -# ifdef TOR_BROWSER_UPDATE
|
|
| 2812 | +# ifdef BASE_BROWSER_VERSION_QUOTED
|
|
| 2813 | + // Use the base browser version to prevent downgrade attacks.
|
|
| 2813 | 2814 | const char* appVersion = BASE_BROWSER_VERSION_QUOTED;
|
| 2814 | 2815 | # else
|
| 2815 | 2816 | const char* appVersion = MOZ_APP_VERSION;
|
| ... | ... | @@ -232,8 +232,8 @@ for var in ("APP_VERSION", "APP_ID"): |
| 232 | 232 | if CONFIG["MOZ_BUILD_APP"] == "browser":
|
| 233 | 233 | DEFINES["MOZ_BUILD_APP_IS_BROWSER"] = True
|
| 234 | 234 | |
| 235 | -if CONFIG['TOR_BROWSER_UPDATE']:
|
|
| 236 | - DEFINES['MAR_NSS'] = True
|
|
| 235 | +if CONFIG["MOZ_USE_NSS_FOR_MAR"]:
|
|
| 236 | + DEFINES["MAR_NSS"] = True
|
|
| 237 | 237 | |
| 238 | 238 | LOCAL_INCLUDES += [
|
| 239 | 239 | "../../other-licenses/nsis/Contrib/CityHash/cityhash",
|
| ... | ... | @@ -342,8 +342,7 @@ static bool IsOlderVersion(nsIFile* versionFile, const char* appVersion) { |
| 342 | 342 | return mozilla::Version(appVersion) > buf;
|
| 343 | 343 | }
|
| 344 | 344 | |
| 345 | -#if defined(TOR_BROWSER_UPDATE) && defined(MOZ_VERIFY_MAR_SIGNATURE) && \
|
|
| 346 | - defined(MAR_NSS) && defined(XP_MACOSX)
|
|
| 345 | +#if defined(MOZ_VERIFY_MAR_SIGNATURE) && defined(MAR_NSS) && defined(XP_MACOSX)
|
|
| 347 | 346 | /**
|
| 348 | 347 | * Ideally we would save and restore the original library path value after
|
| 349 | 348 | * the updater finishes its work (and before firefox is re-launched).
|
| ... | ... | @@ -656,8 +655,7 @@ static void ApplyUpdate(nsIFile* greDir, nsIFile* updateDir, nsIFile* appDir, |
| 656 | 655 | PR_SetEnv("MOZ_SAFE_MODE_RESTART=1");
|
| 657 | 656 | }
|
| 658 | 657 | |
| 659 | -#if defined(TOR_BROWSER_UPDATE) && defined(MOZ_VERIFY_MAR_SIGNATURE) && \
|
|
| 660 | - defined(MAR_NSS) && defined(XP_MACOSX)
|
|
| 658 | +#if defined(MOZ_VERIFY_MAR_SIGNATURE) && defined(MAR_NSS) && defined(XP_MACOSX)
|
|
| 661 | 659 | // On macOS, append the app directory to the shared library search path
|
| 662 | 660 | // so the system can locate the shared libraries that are needed by the
|
| 663 | 661 | // updater, e.g., libnss3.dylib).
|