]>
git.ipfire.org Git - thirdparty/FORT-validator.git/log
Alberto Leiva Popper [Sat, 30 May 2026 21:50:19 +0000 (15:50 -0600)]
Update debian metadata (Fort 1.6.8)
Alberto Leiva Popper [Fri, 29 May 2026 21:19:52 +0000 (15:19 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Fri, 29 May 2026 21:08:32 +0000 (15:08 -0600)]
Protocolary updates for release 1.6.8
Alberto Leiva Popper [Fri, 29 May 2026 14:53:34 +0000 (08:53 -0600)]
Review of #includes
Alberto Leiva Popper [Fri, 29 May 2026 13:52:23 +0000 (07:52 -0600)]
Update unit tests
Alberto Leiva Popper [Fri, 29 May 2026 13:46:29 +0000 (07:46 -0600)]
Merge branch 'GHSA-qfm3-577x-rh54'
Job Snijders [Sat, 16 May 2026 14:41:47 +0000 (14:41 +0000)]
Exclude hidden files and directories when synchronizing via Rsync
According to RFC 9286 section 4.2.2, filenames in the RPKI cannot start
with a dot. And RFC 6481 section 1.1 describes the concept of a publication
point as a "directory in a publicly accessible filesystem". From there it
follows there is no need to transfer hidden files and directories. This may
help in avoiding exposure to intermediate states (e.g., /a/.~tmp~/b.roa).
Alberto Leiva Popper [Tue, 28 Apr 2026 23:37:01 +0000 (17:37 -0600)]
Refuse cross-origin RRDP
RFC 9674. This code was mostly copied from Fort 2's current
pseudo-alpha.
Alberto Leiva Popper [Mon, 27 Apr 2026 21:37:47 +0000 (15:37 -0600)]
Do not delete RPP files if snapshot is already exploded
There are situations in which the code might find itself attempting
to explode a snapshot a second time during a validation run.
The code was noticing this, and thus skipping the second download.
But by then, the cached files were already deleted. Which resulted
in the validation code receiving zero files as input.
Alberto Leiva Popper [Fri, 30 Jan 2026 22:29:58 +0000 (16:29 -0600)]
Improve NID API usage
The code was seemingly assuming that NID_undef == 0.
Alberto Leiva Popper [Mon, 19 Jan 2026 19:08:30 +0000 (13:08 -0600)]
Reject negative certificate serial numbers
Thanks to 雷东政 for reporting this.
Alberto Leiva Popper [Tue, 23 Sep 2025 18:04:23 +0000 (12:04 -0600)]
Update Docker
Alberto Leiva Popper [Wed, 17 Sep 2025 17:28:59 +0000 (11:28 -0600)]
Documentation: Installation recipes review
I removed a bunch, because I need a better framework to keep them up to date.
But I need to postpone that work until after Fort 2.
But also, this doesn't even feel like the right place to document packages
not maintained by LACNIC... but that's #130's scope.
At least one package (Gentoo) seems abandoned, as well.
Alberto Leiva Popper [Tue, 16 Sep 2025 19:59:33 +0000 (13:59 -0600)]
Protocolary updates for release 1.6.7
Alberto Leiva Popper [Tue, 16 Sep 2025 17:19:11 +0000 (11:19 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Fri, 12 Sep 2025 18:39:11 +0000 (12:39 -0600)]
Protocolary updates for release 1.6.7
Alberto Leiva Popper [Fri, 12 Sep 2025 18:38:31 +0000 (12:38 -0600)]
Add proxy and Prometheus to documentation
Alberto Leiva Popper [Thu, 11 Sep 2025 23:45:57 +0000 (17:45 -0600)]
Add gauge to track RTR readyness
Starts as 0, becomes 1 when the VRP database has been populated.
Intended to replace the awkward log msg at least one user tracks:
> First validation cycle successfully ended,
> now you can connect your router(s)
For #133.
Alberto Leiva Popper [Thu, 11 Sep 2025 23:07:13 +0000 (17:07 -0600)]
Review of #includes
Alberto Leiva Popper [Thu, 11 Sep 2025 22:11:48 +0000 (16:11 -0600)]
Merge branch 'issue160'
Alberto Leiva Popper [Fri, 29 Aug 2025 18:16:04 +0000 (12:16 -0600)]
Allow server.port to be an integer in JSON
The old string parser still works too.
For #50.
Alberto Leiva Popper [Fri, 8 Aug 2025 17:15:32 +0000 (11:15 -0600)]
Prometheus: Allow plaintext Content-Type
In general, the openmetrics Content-Type is preferred. The code makes
an exception out of browsers, however.
The full logic is
- If the request has no Accept header, Content-Type will be openmetrics
1.0.0.
- If the Accept header expects neither openmetrics nor plaintext,
Content-Type will be plaintext 0.0.4.
This is because the client is usually a browser (which seem to typically
lack Openmetrics handlers) or a generic HTTP client like curl (which
don't really care about Content-Type).
- Otherwise Fort will decide between openmetrics 1.0.0 or plaintext
0.0.4, depending on q-values. (Requested version will be ignored,
because only one is supported for each.) If their q is the same,
openmetrics will be preferred.
For #50.
Alberto Leiva Popper [Thu, 7 Aug 2025 18:12:43 +0000 (12:12 -0600)]
Fix libmicrohttpd <= 0.9.60 API usage
Should now work for libmicrohttpd 0.9.16 to 1.0.2.
For #50.
Alberto Leiva Popper [Wed, 6 Aug 2025 17:19:48 +0000 (11:19 -0600)]
Fix libmicrohttpd <= 0.9.70 API usage
Should now work for libmicrohttpd 0.9.61 to 1.0.2.
For #50.
Alberto Leiva Popper [Wed, 6 Aug 2025 00:42:34 +0000 (18:42 -0600)]
Implement Prometheus
Fixes #50.
For now, it only implements the following stats:
fort_valid_vrps_total{ta="<TA>",proto="ipv<IP>"}
Total VRPs generated from TA <TA> (and the given
protocol) during the previous cycle.
"<TA>" is inferred from the TAL's file name.
fort_rtr_current_connections
Number of active RTR clients.
To activate the server, set --mode=server and --prometheus.port to an
allowed and available port number.
Adds libmicrohttpd as a dependency.
Alberto Leiva Popper [Fri, 30 May 2025 20:17:07 +0000 (14:17 -0600)]
Doc: Add installation steps for Rocky 9
Alberto Leiva Popper [Fri, 16 May 2025 16:52:20 +0000 (10:52 -0600)]
Add --http.proxy
Attempt to fix #160.
Alberto Leiva Popper [Wed, 14 May 2025 19:25:50 +0000 (13:25 -0600)]
Add character check in certificate subjects and issuers
Fixes #159.
Alberto Leiva Popper [Wed, 5 Feb 2025 22:36:43 +0000 (16:36 -0600)]
Update debian metadata (Fort 1.6.6)
Alberto Leiva Popper [Wed, 5 Feb 2025 22:31:50 +0000 (16:31 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Wed, 5 Feb 2025 22:29:48 +0000 (16:29 -0600)]
Protocolary updates for release 1.6.6
Alberto Leiva Popper [Wed, 5 Feb 2025 19:14:42 +0000 (13:14 -0600)]
Increase http.max-file-size's default
We got a 530 mB snapshot nowadays. Since these tend to double during
key rollover, the old default of 1 gB no longer makes sense.
Alberto Leiva Popper [Wed, 22 Jan 2025 23:26:39 +0000 (17:26 -0600)]
RRDP: Mirror rsync extension filters
We've agreed extension filters are useful, and the manifest code no
longer drops RPPs due to unknown file-not-founds.
So prevent unknown file extensions from contaminating the RRDP side of
the cache as well.
Complements #155.
Alberto Leiva Popper [Wed, 22 Jan 2025 22:38:37 +0000 (16:38 -0600)]
Stop rejecting RPPs if unrecognizable absent files are fileListed
RFC 9286:
> The RP MUST acquire all of the files enumerated in the manifest
> (fileList) from the publication point. If there are files listed in
> the manifest that cannot be retrieved from the publication point,
> the RP MUST treat this as a failed fetch.
This was clashing with Fort's default rsync filters because they were
preventing unknown extensions from being downloaded:
> rsync (...) --include=*.cer --include=*.crl --include=*.gbr \
> --include=*.mft --include=*.roa --exclude=* (...)
Which will be a problem whenever the IETF defines new legal repository
extensions, such as .asa.
Therefore, ignore unknown manifest fileList extensions. This technically
violates RFC 9286, but it's necessary evil given that we can't trust
repositories to always only serve proper RPKI content.
Fixes #155.
Alberto Leiva Popper [Thu, 2 Jan 2025 22:42:17 +0000 (16:42 -0600)]
Name CVE-2024-56375
Alberto Leiva Popper [Fri, 20 Dec 2024 22:12:21 +0000 (16:12 -0600)]
Add new CVE sketch
Alberto Leiva Popper [Wed, 18 Dec 2024 23:29:32 +0000 (17:29 -0600)]
Update debian metadata (Fort 1.6.5)
Alberto Leiva Popper [Wed, 18 Dec 2024 23:11:20 +0000 (17:11 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Wed, 18 Dec 2024 22:57:58 +0000 (16:57 -0600)]
Protocolary updates for release 1.6.5
Alberto Leiva Popper [Wed, 18 Dec 2024 21:58:54 +0000 (15:58 -0600)]
Check manifest fileList emptiness before shuffling
Prevents the loop iterating indefinitely trying to shuffle an array
that's not actually there.
Fixes #154 and new CVE.
Alberto Leiva Popper [Wed, 18 Dec 2024 18:57:46 +0000 (12:57 -0600)]
Name CVE-2024-56169 and CVE-2024-56170
Alberto Leiva Popper [Tue, 26 Nov 2024 23:58:19 +0000 (17:58 -0600)]
Add new CVE sketches
Alberto Leiva Popper [Mon, 14 Oct 2024 17:32:22 +0000 (11:32 -0600)]
Name CVE-2024-48943
Alberto Leiva Popper [Mon, 30 Sep 2024 18:06:17 +0000 (12:06 -0600)]
Enclose each test sandbox in a dedicated directory
Prevents them from interfering with each other.
Fixes #148.
Alberto Leiva Popper [Tue, 24 Sep 2024 16:51:02 +0000 (10:51 -0600)]
Update Docker
Alberto Leiva Popper [Tue, 24 Sep 2024 00:19:58 +0000 (18:19 -0600)]
Add 1.6.4 CVE
Alberto Leiva Popper [Mon, 23 Sep 2024 19:50:45 +0000 (13:50 -0600)]
Update debian metadata (Fort 1.6.4)
Alberto Leiva Popper [Mon, 23 Sep 2024 19:36:19 +0000 (13:36 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Mon, 23 Sep 2024 19:34:19 +0000 (13:34 -0600)]
Protocolary updates for release 1.6.4
Alberto Leiva Popper [Thu, 5 Sep 2024 20:39:11 +0000 (14:39 -0600)]
Misc log review
- Print dependency versions during startup
- Print date ranges for certificates and CRLs
Alberto Leiva Popper [Tue, 3 Sep 2024 22:22:29 +0000 (16:22 -0600)]
Fix default values in the documentation
The retry counts and intervals were wrong.
Alberto Leiva Popper [Tue, 3 Sep 2024 21:45:50 +0000 (15:45 -0600)]
Merge branch 'job-rsync_timeout_poll'
Alberto Leiva Popper [Tue, 3 Sep 2024 20:25:41 +0000 (14:25 -0600)]
Add more unit tests to the rsync timeout
Aight, think I'm done testing this.
Alberto Leiva Popper [Fri, 30 Aug 2024 02:48:54 +0000 (20:48 -0600)]
Exhaust rsync's stderr and stdout at the same time
I'm assuming this consumes less RAM, as stdout no longer has to buffer
completely until stderr is done.
Alberto Leiva Popper [Thu, 29 Aug 2024 22:49:55 +0000 (16:49 -0600)]
Refactor exhaust_read_fd()'s return value
Allows the unit test to tell the difference between timeout and error.
Alberto Leiva Popper [Thu, 29 Aug 2024 22:33:40 +0000 (16:33 -0600)]
Separate POLLERR and POLLNVAL for rsync poll
POLLERR must induce close(), POLLNVAL must not.
Alberto Leiva Popper [Thu, 29 Aug 2024 22:27:23 +0000 (16:27 -0600)]
Rename the exhaust stream functions, simplify arg list
Alberto Leiva Popper [Thu, 29 Aug 2024 21:19:02 +0000 (15:19 -0600)]
Update timeout during every rsync poll
Ensures the timeout is absolute even when poll() returns repeatedly.
Job Snijders [Thu, 22 Aug 2024 16:33:59 +0000 (16:33 +0000)]
Introduce a rsync transfer timeout
Default set to 900 (same as rpki-client)
Fixes https://github.com/NICMx/FORT-validator/issues/74
Alberto Leiva Popper [Tue, 27 Aug 2024 14:52:00 +0000 (08:52 -0600)]
Fill up CVE numbers in documentation
Alberto Leiva Popper [Fri, 23 Aug 2024 20:07:50 +0000 (14:07 -0600)]
Merge branch 'job-pr146'
Alberto Leiva Popper [Thu, 22 Aug 2024 20:14:42 +0000 (14:14 -0600)]
Merge branch 'job-pr144'
Alberto Leiva Popper [Thu, 22 Aug 2024 18:40:48 +0000 (12:40 -0600)]
Improve Key Usage validation more
- Was not checking the decipherOnly bit
- Was not using the buffer meant to ease checking the decipherOnly bit
Again, thanks to Niklas Vogel and Haya Schulmann for reporting this.
Job Snijders [Thu, 22 Aug 2024 16:40:42 +0000 (16:40 +0000)]
Set default HTTP transfer timeout to 900
Alberto Leiva Popper [Thu, 22 Aug 2024 16:27:23 +0000 (10:27 -0600)]
Credit Haya Schulmann for her contributions to the CVEs
Job Snijders [Thu, 22 Aug 2024 11:15:37 +0000 (11:15 +0000)]
Improve compliance with RFC 9589
As of 9589, the CMS SigningTime attribute is mandatory and the
CMS BinarySigningTime attribute is forbidden.
Alberto Leiva Popper [Thu, 22 Aug 2024 03:19:50 +0000 (21:19 -0600)]
Update Docker
Alberto Leiva Popper [Thu, 22 Aug 2024 02:46:03 +0000 (20:46 -0600)]
Add CVE "reference" sketch
Alberto Leiva Popper [Mon, 19 Aug 2024 19:45:21 +0000 (13:45 -0600)]
Update debian metadata (Fort 1.6.3)
Alberto Leiva Popper [Mon, 19 Aug 2024 19:33:44 +0000 (13:33 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Mon, 19 Aug 2024 19:11:44 +0000 (13:11 -0600)]
Protocolary updates for release 1.6.3
Alberto Leiva Popper [Thu, 15 Aug 2024 23:48:25 +0000 (17:48 -0600)]
Review of #includes
Now featuring local includes too.
Alberto Leiva Popper [Thu, 15 Aug 2024 23:41:55 +0000 (17:41 -0600)]
Remove redundant forward declarations in ASN1
Alberto Leiva Popper [Tue, 6 Aug 2024 16:35:59 +0000 (10:35 -0600)]
Prevent crash on BER-encoded signedAttrs
The code was assuming the object was DER-encoded, and the relevant
integer was therefore in short form.
Because I postponed the DER enforcement in
deef7b7823f21914b17838f152a8bd510a348f54 , the code should not make
reckless assumptions about the signedAttrs encoding.
Thanks to Niklas Vogel for reporting this.
Alberto Leiva Popper [Tue, 6 Aug 2024 16:35:24 +0000 (10:35 -0600)]
Prevent crash on missing eContent
Applies to the RouteOriginAttestation and Manifest octet strings.
Thanks to Niklas Vogel for reporting this.
Alberto Leiva Popper [Tue, 6 Aug 2024 16:35:14 +0000 (10:35 -0600)]
Prevent crash on missing signedAttrs
Though RPKI enforces the presence of this field, it is very much
optional in CMS.
Also adds missing validation messages in relevant error paths.
Thanks to Niklas Vogel for reporting this.
Alberto Leiva Popper [Tue, 6 Aug 2024 16:29:44 +0000 (10:29 -0600)]
Prevent crash on missing Authority Key Identifier
Another missing NULL check.
Thanks to Niklas Vogel for reporting this.
Alberto Leiva Popper [Tue, 6 Aug 2024 16:29:16 +0000 (10:29 -0600)]
Prevent crash on malformed Key Usage
Key Usage bit strings longer than 2 bytes were inducing buffer overflow.
Thanks to Niklas Vogel for reporting this.
Alberto Leiva Popper [Tue, 6 Aug 2024 16:28:57 +0000 (10:28 -0600)]
Prevent crash on malformed subjectPublicKey
A malformed subjectPublicKey causes X509_PUBKEY_get0() to return NULL.
Fort wasn't catching this when linked specifically to OpenSSL < 3.
Thanks to Niklas Vogel for reporting this.
Job Snijders [Sat, 3 Aug 2024 13:30:53 +0000 (15:30 +0200)]
Use HTTP compressed encoding when available
This reduces network traffic by about 50%.
Job Snijders [Wed, 24 Jul 2024 19:54:50 +0000 (19:54 +0000)]
Clarify why CRL Number extensions do not need to be processed
Alberto Leiva Popper [Wed, 3 Jul 2024 18:26:59 +0000 (12:26 -0600)]
rand_r(): Separate seed and random number
Enforces originally intended usage of rand_r()'s API.
Mostly just paranoia, maybe.
Job Snijders [Tue, 25 Jun 2024 07:24:04 +0000 (07:24 +0000)]
Use thread-safe PRNG
rand() isn't thread-safe on all platforms (musl libc for example)
use rand_r() instead
Job Snijders [Tue, 25 Jun 2024 05:21:39 +0000 (05:21 +0000)]
Generate all permutations of the list with equal probability
@botovq was kind enough to point out that although my earlier
implementation produced random-ish ordering, it strictly speaking
wasn't Fisher-Yates.
We need to ensure `j` is a random number between `i` and `list.count`
see the second example in the 'Modern Algorithm'
https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
Job Snijders [Thu, 13 Jun 2024 18:21:36 +0000 (18:21 +0000)]
Shuffle the order in which Manifest entries are processed
Previously work items were enqueued in the order the CA intended them
to appear on a Manifest. However, there is no obvious benefit to letting
third parties decide the order in which objects are processed.
Instead, randomize the list of FileAndHashes, its ordering has no meaning
anyway. As they say, a fox is not taken twice in the same snare
Job Snijders [Fri, 7 Jun 2024 17:09:44 +0000 (17:09 +0000)]
Verify the signature on a self-signed TA cert against it's own pubkey
X509_verify_cert() doesn't check the purported root certificate itself
unless X509_V_FLAG_CHECK_SS_SIGNATURE is set.
The pubkey was compared against the TAL, so check that the signature is
right as required by RFC 6487, section 7, additional condition 1,
applied to self-issued certs.
The error check looks weird, but OpenSSL 3 broke yet another API.
With help from Theo Buehler and Claudio Jeker
Alberto Leiva Popper [Mon, 3 Jun 2024 22:48:15 +0000 (16:48 -0600)]
Fix relax_ng_log_str_err() signature for old libxml2 versions
Pull request #137 fixes relax_ng_log_str_err()'s argument list for
libxml2 2.12 and above, but breaks it for libxml2 2.11 and below.
Lucio Sauer [Sun, 2 Jun 2024 23:28:35 +0000 (01:28 +0200)]
Simplify XML reader error handler
No need to check if ptr[strlen(ptr) - 1] is '\n' because because C
strings always end with a null-byte.
Lucio Sauer [Sun, 2 Jun 2024 23:26:31 +0000 (01:26 +0200)]
Fix build failure with GCC 14 due to -Wincompatible-pointer-types
Reported downstream at https://bugs.gentoo.org/928331
Alberto Leiva Popper [Thu, 30 May 2024 18:11:27 +0000 (12:11 -0600)]
Update APNIC TALs
Their "current" TALs are not the ideal ones. Switch to the ones that
feature HTTP.
Spawned by #133.
Alberto Leiva Popper [Sat, 25 May 2024 16:15:10 +0000 (10:15 -0600)]
Update Docker
Alberto Leiva Popper [Fri, 24 May 2024 21:41:42 +0000 (15:41 -0600)]
Update debian metadata (Fort 1.6.2)
Alberto Leiva Popper [Fri, 24 May 2024 20:52:53 +0000 (14:52 -0600)]
Merge branch 'main' into debian
Alberto Leiva Popper [Fri, 24 May 2024 20:19:48 +0000 (14:19 -0600)]
Final protocolary updates for release 1.6.2
Alberto Leiva Popper [Fri, 24 May 2024 18:59:15 +0000 (12:59 -0600)]
Fix unit tests
Alberto Leiva Popper [Fri, 24 May 2024 18:46:41 +0000 (12:46 -0600)]
Restore the "now you can connect your routers" WRN
Requested by #133. Temporal fix.
Alberto Leiva Popper [Thu, 23 May 2024 22:16:15 +0000 (16:16 -0600)]
Fix most of the -Wnon-pointer-null violations
The cgcc review no longer needs -Wno-non-pointer-null.
Alberto Leiva Popper [Thu, 23 May 2024 22:15:37 +0000 (16:15 -0600)]
Mirror
1165270e73508b9fb3dfdc0294a5926d56679c75 in other d2i's
Also, fix memory leak in signed_data.c.
Alberto Leiva Popper [Thu, 23 May 2024 20:28:58 +0000 (14:28 -0600)]
Add documentation for --mode=print
Alberto Leiva Popper [Thu, 23 May 2024 19:05:32 +0000 (13:05 -0600)]
Change --server.address default
The old default had been causing mayhem on Linux since
202e0fe34dc3c8dcb1a0ad12faa7f4d5a7c91b2d .
The new default is OS-sensitive, and binds the socket to all available
IPv4 and IPv6 addresses.