As already mentioned in the other answer, the randomness extraction method of HKDF is simply a call to HMAC with the salt as the key and the Input Keying Material as the HMAC input. That is $\mathsf{Extract}(salt, ikm) = \mathsf{HMAC}(salt, ikm)$.
At a high-level, $ikm$ is drawn from a high min-entropy(not necessarily uniform) source, and we want to extract a uniform key out of $ikm$.
Krawczyk states a formal definition for key derivation functions in the HKDF paper: https://eprint.iacr.org/2010/264.pdf. At a high level, this is a security game that asks an adversary to distinguish a random value from one derived from a secret $ikm$. The adversary is also given a description of the IKM source and the salt used in the key derivation. Therefore, the security notion does not demand that the salt is secret.
What's happening then in TLS 1.3? Recall that $\mathsf{Extract}(salt, ikm) = \mathsf{HMAC}(salt, ikm)$. Therefore if $salt$ is not only secret but crucially pseudo-random, this is the normal "secure" invocation of HMAC as a pseudo-random function. And it's a legitimate usage because, at this point, the derived handshake secret is considered pseudo-random, and a PRF produces a pseudo-random output for each new input when keyed with a pseudo-random key. I assume this is an abuse of notation, given that HMAC is the underlying primitive in HKDF. Moreover, since the IKM used for the master secret is a fixed 0 value, it would seem strange to talk about randomness extraction. A fixed value doesn't have much