Page MenuHomePhabricator

UserInfoCard: Visual cue that other temporary accounts are active on the same IP or IPv6 /64 range
Open, MediumPublic3 Estimated Story Points

Description

Summary

When a temporary account is shown in the UserInfoCard, also provide a visual cue to indicate if other active (registered in last 90 days) temporary accounts exist on the same IP address / IP address range.

Background

  • Temporary accounts paradigm means that users without IP reveal access cannot see that a bad actor has created multiple temporary accounts from the same IP address
  • Providing an indicator that there are other temporary accounts from the same IP or IPv6 /64 range can help:
    • users without IP reveal access can scrutinize those contributions more closely
    • users with IP reveal access would know that revealing the IP may be necessary for further investigation
  • Note that multiple temporary accounts from a single IP is *not* a sole predictor of a bad actor, given that schools, universities, and larger communities in countries with fewer IP addresses can share a single IP address
  • The visual cue is an icon and text: "Temporary accounts from this IP: [count]". We'll need a link to documentation to explain further what the implications are.
  • We should *not* provide any details about which specific temporary account names are active on the same IP / IPv6 /64 range. We should just note the fact that other temp accounts exist.

User story

  • As a user without IP reveal rights, I want to understand if a temporary account is possibly associated with a bad actor who is creating multiple temporary accounts from the same IP
  • As a user with IP reveal rights, I want a visual indicator to understand if IP reveal is more likely to be productive when investigating an account

Design

T389448: UserInfoCard: Design Temporary User Card

temp-user-info-card-4Jun.png (2×3 px, 729 KB)

  • Icon: UserTemporary
  • Copy: Temporary accounts from this IP: [count]
  • Numbers are bucketed to protect privacy: 0, 1-2, 3-5, 6-10, 11+

Technical notes

(needs more detail)

  • Use the same code involved in Special:IPContributions
  • Need to consider that when we say "other temporary accounts are active on the same IP / IPv6 range" that we take into account the initial edit that created the temporary account, and any subsequent IPs used in further editing
  • Would be nice to package this code such that it could potentially be reused elsewhere, e.g. an AbuseFilter variable that could provide stricter rate limiting if we see that multiple temporary accounts are active from a single IP in a short period of time

Acceptance criteria

  • When viewing temporary accounts in the UserInfoCard, we see a visual cue that other active temporary accounts exist on the IP / IPv6 /64 range
  • Documentation exists to explain to the user what the implications are (e.g. not necessarily a bad actor)

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript
This comment has been deleted.

Here are some options for displaying whether there are temp users from the same IP. Interested to hear thoughts and preferences. Would it be useful to include a count? How prominent does the information need to be?

image.png (1×2 px, 281 KB)

T389448: UserInfoCard: Design Temporary User Card

Update: Latest design is here and includes a count with temp user icon:

user-info-card-temp-08May.png (2×3 px, 748 KB)

Legal has given the go ahead to include a bucketed count (bucketed to protect privacy).

There is some discussion on whether this count should be small (e.g. 1-2, 3-5, 6-10, 11+) or larger ranges (1-5, 5-10, 10-20, 20-50, 51+).

Update: Latest design is here and includes a count with temp user icon:

user-info-card-temp-08May.png (2×3 px, 748 KB)

Legal has given the go ahead to include a bucketed count (bucketed to protect privacy).

There is some discussion on whether this count should be small (e.g. 1-2, 3-5, 6-10, 11+) or larger ranges (1-5, 5-10, 10-20, 20-50, 51+).

In this design, there is no mention of IPv6 /64 range or IPv4 /16 range. Has the idea been abandoned or is it just not in the mockup?

Update: Latest design is here and includes a count with temp user icon:

user-info-card-temp-08May.png (2×3 px, 748 KB)

Legal has given the go ahead to include a bucketed count (bucketed to protect privacy).

There is some discussion on whether this count should be small (e.g. 1-2, 3-5, 6-10, 11+) or larger ranges (1-5, 5-10, 10-20, 20-50, 51+).

In this design, there is no mention of IPv6 /64 range or IPv4 /16 range. Has the idea been abandoned or is it just not in the mockup?

I believe the idea is for the bucketed count to include /64 range for IPv6 and an exact match for IPv4.

kostajh set the point value for this task to 3.Aug 1 2025, 9:28 AM

We should break this down into a few smaller pieces.

cc @KColeman-WMF @kostajh what IP do we want to associated with the temporary account in question? A temporary account can be associated with many IPs if its IP hopping. There are a few options:

  • on revision/log lines, the IP used could be passed along. Not all instances of UIC can be associated with a revision/log id (eg. Special:ListUsers) however so this would need a fallback. Additionally, this means that if a temp account is IP hopping, different instances of UIC could show different aggregate counts for the same account.
  • most recently used ip
  • we probably have the ip it was created from?
  • aggregate of all used ips?
    • the temp account has multiple ips, each of those can have multiple temporary accounts, sum all of those up

@STran Of the options you listed I also think sum of temp accounts from all IPs makes the most sense.

  • Using the revision/log IP or the most recently used IP will lead to a confusing state where the card displays different information depending on which page or when it is opened.
  • The IP the account was created from is not very useful and quite limiting

Should we limit how many IPs we will check to optimize for performance? Or if you think performance should not be a concern let's go ahead with summing up temp accounts from all associated IPs and evaluate afterwards.

Change #1181698 had a related patch set uploaded (by STran; author: STran):

[mediawiki/extensions/CheckUser@master] Refactor out query builder in CheckUserTemporaryAccountsByIPLookup

https://gerrit.wikimedia.org/r/1181698

Change #1182191 had a related patch set uploaded (by STran; author: STran):

[mediawiki/extensions/CheckUser@master] Add "active on IP/range" temp account count to UserInfoCard

https://gerrit.wikimedia.org/r/1182191

@KColeman-WMF The implementation of the number has changed to be an aggregate count of all temporary accounts found on all IPs associated with the temp account being looked up. As such, the original copy seems to be outdated (Temporary accounts from this IP), Would this copy be okay instead? Other temporary accounts on the IPs. Happy to change it to anything.

@KColeman-WMF The implementation of the number has changed to be an aggregate count of all temporary accounts found on all IPs associated with the temp account being looked up. As such, the original copy seems to be outdated (Temporary accounts from this IP), Would this copy be okay instead? Other temporary accounts on the IPs. Happy to change it to anything.

I do think this is a harder concept to convey in simple terms. Perhaps we will need a tooltip for this line of information?

How about: Temporary accounts from all associated IPs: [count]

We could also include tooltip text on hover: An aggregate count of all temporary accounts from all IPs associated with this account

image.png (990×1 px, 198 KB)

Change #1181698 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Refactor out query builder in CheckUserTemporaryAccountsByIPLookup

https://gerrit.wikimedia.org/r/1181698

Change #1182191 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Add "active on IP/range" temp account count to UserInfoCard

https://gerrit.wikimedia.org/r/1182191

Change #1184769 had a related patch set uploaded (by STran; author: STran):

[mediawiki/extensions/CheckUser@master] Add tooltip to UserInfoCard's temporary account aggregate count property

https://gerrit.wikimedia.org/r/1184769

Change #1184769 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Add tooltip to UserInfoCard's temporary account aggregate count property

https://gerrit.wikimedia.org/r/1184769

Change #1185932 had a related patch set uploaded (by STran; author: STran):

[mediawiki/extensions/CheckUser@master] Look up cu_log_events accounts in getTempAccountsFromIPAddress()

https://gerrit.wikimedia.org/r/1185932

Change #1185932 had a related patch set uploaded (by STran; author: STran):

[mediawiki/extensions/CheckUser@master] Look up cu_log_events accounts in getTempAccountsFromIPAddress()

https://gerrit.wikimedia.org/r/1185932

@STran In case this has been forgotten, this hasn't been merged yet.

@KColeman-WMF @STran A couple of questions:

  1. If a temporary account does not have rows in the CheckUser tables, for example the data has been pruned after 90 days, we currently return 0 because we don't have an IP address for them. This might be misleading as we don't know if any other temporary accounts share/once shared an IP(s). We could instead return something like unknown or data expired.
  2. I am unsure what aggregate count means and how it is different from a normal count.
  3. Should the temporary account you are looking up be included in the count (currently it is)?
  4. Should the help text mention that we include the entire IPv6 /64 range, or is that TMI?

I think these are mostly for Katie to decide but to add some context to

We could instead return something like unknown or data expired.

I think the case in regular usage must always be expired as if the temporary account exists then it should have logged a createaccount event in the CU logs but there's nothing stopping the query from running on non-existent temp accounts. We should be able to respond to that accordingly if necessary but flagging it here so we can decide about it.

Change #1185932 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Look up cu_log_events accounts in getTempAccountsFromIPAddress()

https://gerrit.wikimedia.org/r/1185932

Moving to Done, but there are still open questions for @KColeman-WMF.

@KColeman-WMF @STran A couple of questions:

  1. If a temporary account does not have rows in the CheckUser tables, for example the data has been pruned after 90 days, we currently return 0 because we don't have an IP address for them. This might be misleading as we don't know if any other temporary accounts share/once shared an IP(s). We could instead return something like unknown or data expired.
  2. I am unsure what aggregate count means and how it is different from a normal count.
  3. Should the temporary account you are looking up be included in the count (currently it is)?
  4. Should the help text mention that we include the entire IPv6 /64 range, or is that TMI?