I have read some articles about Shor's code (e.g. this one). It is said that Shor's code can correct a single-qubit error. What about two qubit errors? Three qubit errors? It confused me a lot...
Suppose we have a quantum error correcting code that encodes a logical qubit in $n$ physical qubits in a way that enables us to correct any $t$ errors. We can use this code to encode $n$ logical qubits in $n^2$ physical qubits and then we can add a second level of encoding to encode a second-level logical qubit into the $n$ first-level logical qubits.
How many errors can the resulting two-level code correct? For an error to occur at the second level, at least $t+1$ first-level encoded qubits must suffer an error. For an error to occur in any first level encoded qubit, at least $t+1$ physical qubits must suffer an error. Thus, for an error to occur at the second level, there must be at least $(t+1)^2$ physical errors. Consequently, the two-level concatenated code can correct any
$$ (t+1)^2 - 1 = t^2 + 2t $$
physical errors. For example, the two level Shor's code can correct any three physical errors.
Concatenation can be continued to any number of levels and if the physical error rate is low enough it allows us to bring the logical error rate below any desired target value. This last result is known as the threshold theorem.
Shor's code is specifically designed to correct all possible single-qubit errors. There are some two-qubit errors that it can correct for (e.g. Pauli $X$ on one qubit and Pauli $Z$ on another). You will also be able to find specific combinations of multiple-qubit errors for which it can correct, but those will be the exception rather than the rule. Instead, if you want to protect against two-qubit errors, you employ different strategies - either code concatenation, or just find a different error correcting code with a larger distance.