The patch says the problem has been fixed but it's still there, why do we need to patch it again?
Patch says the problem is fixed but it's still there, why do we need to patch again? Because the first round of patches often only cover part of the code path of the defect. When the upstream finds that it's not fixed clean, it will issue another follow-up announcement instead of quietly updating a version number. The Drupal announcement reviewed that day was very straightforward: This is a follow-up announcement, the previous announcement did not completely solve the underlying vulnerability. So 'patched' does not mean 'fixed', and it must be re-inspected after patching.
What does the follow-up announcement mean
There are three typical causes of follow-up announcements. The first is that the repair only handles the main entry, and other entries still follow the old logic; the second is that the patch repaired the permission judgment, but did not repair the cache behavior, causing the old objects to continue to be provided externally; the third is that there are multiple similar writings in the same module, and only one place was changed in the first round. The common points of the three causes are: the vulnerability description has not changed, the affected code surface is wider than expected, and the version number has already moved forward once.
This is why you cannot just read the title of the announcement. Taking this one reviewed on the day as an example, the announcement also describes the residual phenomena: some files will carry the headers that can be publicly cached, while these objects should not be cached. This kind of residual is not eliminated by the upgrade action itself, but by clearing the cache and checking the response headers item by item.
The actual performance of this kind of problem
For a site, the most common manifestations of a second patch are three: the page still exists after the upgrade, the interface returns old data, and the cache and search snapshots still contain content before the repair. The third one is most easily overlooked because the program version query already displays the new version. At this time, you need to confirm the three layers separately: program layer version, page cache layer, and pseudo-static rules and routing layer. After the change of pseudo-static rules, the mapping of old paths may still point to the processing logic before the repair, and this layer is often not checked by many people.
Four-step verification after the upgrade
Check the version first. Compare item by item according to the impact range in the announcement: The affected range is before 2.1.3 and between 3.0.0 and 3.0.3, the fixed version is 2.1.3 and 3.0.3, if it falls within the range, it must be upgraded to the correct version, do not stop at the middle version.
Clear the cache in the second step. Clear the internal cache, page cache, and content delivery network cache separately in three layers, only clearing one layer is equivalent to not clearing it. After clearing, visit once with an incognito window and once with an address with random query parameters to avoid getting an old copy.
Check the response headers in the third step. The caching strategy for addresses that should not be publicly accessible has been changed to non-cacheable; if it still shows public cache, it means the fix has not taken effect or the cache layer has overwritten the patch.
Step four: leave a rollback point. Backup is the premise of re-validation: make a data backup (including static files) before the upgrade, so that any problems that arise during the verification period can be rolled back to a known good state. For those deployed using Docker images, fix the image tag to the verified version; for those deployed using Baota panel or LNMP, the rollback should include the database and site directory, and the verification items should be more detailed.
How to schedule the second patch window?
Don't upgrade immediately when you see a follow-up announcement. First confirm three things: whether the module is installed on this site, whether the module is open to the outside, and whether any abnormal signs have appeared after the last patch. If all three are in place, schedule it for the next regular window; if only the first two are in place, you can use a way to limit access at first, and then list the item separately in the tracking list. The value of a fixed window is here - the patch rhythm is determined by your verification ability, not by the release time of the announcement.
Common questions
Does the follow-up announcement mean that the upstream is unreliable?Not at all. The announcement system will explicitly write out 'not cleaned up', which is exactly the manifestation of traceability, and reading the follow-up instructions is more risk-free than reading the original announcement.
How long does the verification take?The four steps for a single site usually take half an hour; for multiple sites, they need to be calculated in batches, and each batch needs to be completed before moving on to the next batch.
What should be done if the cache is cleared and the old content still remains?Locate by layer: first check if the program layer has really upgraded to the fixed version, then look at the external cache and search snapshot, and finally check if the pseudo-static rules and routing mapping point to the old path.