On Mon, Apr 04, 2022 at 08:44:43PM +0200, Theo Buehler wrote:
> p->res->mft and p->res->repo are populated in sbgp_sia_resouce_entry().
> Nothing guarantees that the resources are present. With our current
> strstr() implementation we would let a cert with a missing mft through
> while we would crash on a missing repo.
>
> Also, we don't check that the SIA extension isn't critical.
>
> Index: cert.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/cert.c,v
> retrieving revision 1.61
> diff -u -p -r1.61 cert.c
> --- cert.c 4 Apr 2022 13:15:11 -0000 1.61
> +++ cert.c 4 Apr 2022 18:12:23 -0000
> @@ -305,6 +305,12 @@ sbgp_sia_resource(struct parse *p, const
> goto out;
> }
>
> + if (p->res->mft == NULL || p->res->repo == NULL) {
> + warnx("%s: RFC 6487 section 4.8.8: SIA missing caRepository "
> + "or rpkiManifest", p->fn);
> + goto out;
> + }
> +
> if (strstr(p->res->mft, p->res->repo) != p->res->mft) {
> warnx("%s: RFC 6487 section 4.8.8: SIA: "
> "conflicting URIs for caRepository and rpkiManifest",
> @@ -329,6 +335,12 @@ sbgp_sia(struct parse *p, X509_EXTENSION
> ASN1_SEQUENCE_ANY *seq = NULL;
> const ASN1_TYPE *t;
> int dsz, rc = 0;
> +
> + if (X509_EXTENSION_get_critical(ext)) {
> + warnx("%s: RFC 6487 section 4.8.8: SIA: "
> + "extension not non-critical", p->fn);
> + goto out;
> + }
>
> if ((dsz = i2d_X509_EXTENSION(ext, &sv)) < 0) {
> cryptowarnx("%s: RFC 6487 section 4.8.8: SIA: "
>
OK claudio@
--
:wq Claudio